GVKun编程网logo

Python:如何获取StringIO.writelines接受unicode字符串?(python接收字符串)

8

本篇文章给大家谈谈Python:如何获取StringIO.writelines接受unicode字符串?,以及python接收字符串的知识点,同时本文还将给你拓展c#–从非托管unicode字符串创建

本篇文章给大家谈谈Python:如何获取StringIO.writelines接受unicode字符串?,以及python接收字符串的知识点,同时本文还将给你拓展c# – 从非托管unicode字符串创建SecureString、delphi – 将AnsiString转换为Unicode字符串、Java String字符串和Unicode字符相互转换代码、JSON.stringify中的Unicode字符转换为真正的Unicode字符等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

Python:如何获取StringIO.writelines接受unicode字符串?(python接收字符串)

Python:如何获取StringIO.writelines接受unicode字符串?(python接收字符串)

我正在

UnicodeEncodeError: ''ascii'' codec can''t encode character u''\xa3'' in position 34: ordinal not in range(128)

在下面存储在’a.desc’中的字符串上,因为它包含’£’字符。它以unicode字符串的形式存储在基础Google App
Engine数据存储区中,这样就可以了。cStringIO.StringIO.writelines函数似乎正在尝试以ascii格式对其进行编码:

result.writelines([''blahblah'',a.desc,''blahblahblah''])

如果这是正确的措辞,我如何指示它将编码视为unicode?

应用程序引擎在python 2.5上运行

答案1

小编典典

StringIO文档:

与StringIO模块实现的存储文件不同,[cStringIO]提供的存储文件不能接受无法编码为纯ASCII字符串的Unicode字符串。

如果可能,请使用StringIO而不是cStringIO。

c# – 从非托管unicode字符串创建SecureString

c# – 从非托管unicode字符串创建SecureString

我想尽可能地将CryptUnprotectData窗口API函数和.net securestring绑定在一起. CryptUnprotectData返回DATA_BLOB结构,该结构由字节数组和字节长度组成.在我的程序中,这将是Unicode UTF-16字符串. securestring有一个构造函数,它接受char *和length params,所以我希望能够做类似的事情:

securestring ss = securestring((char*)textBlob.pbData,textBlob.cbData / 2);

这是有效的,除了UTF-16是可变长度的,所以我真的不知道用什么作为长度参数.上面的示例假定为2个字节字符(BMP),但对于其他平面,它可能最多为4个字节.我需要知道字节数组中的UTF-16字符数.如果不在内存中复制值(从而危及安全性),最好的方法是什么?我计划尽快清零并释放字节数组.

解决方法

据我所知,大多数Windows API处理UTF-16代码点 – 换句话说,您将代理对视为两个代码点而不是单个字符.鉴于securestring的构造函数正在处理指向.NET System.Char值(UTF-16)的指针,我认为你得到的代码片段很好 – pbData中的元素数量是字节大小的一半.

例如,如果pbData包含(仅)代理对,则cbData将为4,并且您仍然希望传入2作为第二个参数 – 因为这是您构建securestring的System.Char值的数量.它是一个非BMP unicode字符的事实与它所代表的UTF-16 System.Char值的数量无关.

(是的,对非BMP数据的支持有点混乱,我怀疑很少有人能在任何地方做到这一点.我相信我没有.幸运的是在很多地方你都不用担心. ..)

delphi – 将AnsiString转换为Unicode字符串

delphi – 将AnsiString转换为Unicode字符串

我正在将D2006程序转换为D2010.我的数据库中每个字符串都有一个存储在单个字节中的值,我需要将其加载到具有LoadFromStream的控件中,因此我的计划是将字符串写入流并将其与LoadFromStream一起使用.但它没有用.在研究这个问题时,我看到一个问题告诉我,我真的不明白从AnsiString到Unicode字符串的转换是如何工作的.这是一段独立的代码,说明了我感到困惑的问题:

procedure TForm1.Button1Click(Sender: TObject); {$O-}
var
  sBuffer: String;
  oStringStream: TStringStream;
  sAnsiString: AnsiString;
  sUnicodeString: String;
  iSize1,iSize2: Word;
begin
  sAnsiString := '12345';
  oStringStream := TStringStream.Create(sBuffer);
  sUnicodeString := sAnsiString;
  iSize1 := StringElementSize(sAnsiString);
  iSize2 := StringElementSize(sUnicodeString);
  oStringStream.WriteString(sUnicodeString);
end;

如果你在最后一行中断,并检查oStringStream的Bytes属性,你会看到它看起来像这样:

Bytes (49 {$31},50 {$32},51 {$33},52 {$34},53 {$35}

我期待它可能看起来像

(49 {$31},00 {$00},53 {$35},00 {$00} ...

显然我的期望是错误的.但是,如何将AnsiString转换为unicode?

我没有从LoadFromStream中获得正确的结果,因为它一次从流中读取两个字节,但它接收的数据不是那样排列的.我应该做些什么来为LoadFromStream提供基于unicode字符串的良好数据流?

谢谢您的帮助.

解决方法

oStringStream.WriteString的参数是什么类型的?如果它是AnsiString,你有一个从Unicode到Ansi的隐式转换,这解释了你的例子.

更新:现在真正的问题是TStringStream如何在内部存储数据.
在以下代码示例中(Delphi 2009)

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
  SS: TStringStream;

begin
  S:= 'asdfg';
  SS:= TStringStream.Create(S);  // 1 byte per char
  SS.WriteString('321');
  Label1.Caption:= SS.DataString;
  SS.Free;
end;

TStringStream在内部使用默认的系统ANSI编码(每个字符1个字节).
构造函数和WriteString过程将字符串参数从unicode转换为ANSI.

要覆盖此行为,您必须在构造函数中明确声明编码:

procedure TForm1.Button1Click(Sender: TObject);
var
  S: string;
  SS: TStringStream;

begin
  S:= 'asdfg';
  SS:= TStringStream.Create(S,TEncoding.Unicode);  // 2 bytes per char
  SS.WriteString('321');
  Label1.Caption:= SS.DataString;
  SS.Free;
end;

Java String字符串和Unicode字符相互转换代码

Java String字符串和Unicode字符相互转换代码

java环境安装后jdk的bin目录有个native2ascii.exe可以实现类似的功能,但是通过java代码也可以实现同样的功能。

字符串转换unicode java方法代码片段:

/**
 * 字符串转换unicode
 */
public static String string2Unicode(String string) {
 
    StringBuffer unicode = new StringBuffer();
 
    for (int i = 0; i < string.length(); i++) {
 
        // 取出每一个字符
        char c = string.charAt(i);
 
        // 转换为unicode
        unicode.append("\\u" + Integer.toHexString(c));
    }
 
    return unicode.toString();
}
登录后复制

unicode转换字符串java方法代码片段:

/**
 * unicode 转字符串
 */
public static String unicode2String(String unicode) {
 
    StringBuffer string = new StringBuffer();
 
    String[] hex = unicode.split("\\\\u");
 
    for (int i = 1; i < hex.length; i++) {
 
        // 转换出每一个代码点
        int data = Integer.parseInt(hex[i], 16);
 
        // 追加成string
        string.append((char) data);
    }
 
    return string.toString();
}
登录后复制

测试java代码片段:

public static void main(String[] args) {
    String test = "最代码网站地址:www.zuidaima.com";
 
    String unicode = string2Unicode(test);
     
    String string = unicode2String(unicode) ;
     
    System.out.println(unicode);
     
    System.out.println(string);
 
}
登录后复制

输出结果:

立即学习“Java免费学习笔记(深入)”;

\u6700\u4ee3\u7801\u7f51\u7ad9\u5730\u5740\u3a\u77\u77\u77\u2e\u7a\u75\u69\u64\u61\u69\u6d\u61\u2e\u63\u6f\u6d

更多 Java String字符串和Unicode字符相互转换代码相关文章请关注PHP中文网!

JSON.stringify中的Unicode字符转换为真正的Unicode字符

JSON.stringify中的Unicode字符转换为真正的Unicode字符

我使用JSON.stringify()函数对AJAX发送到PHP的JS对象进行字符串化处理。

当JSON.stringify函数将Unicode字符编码为格式\uxxxx(例如\u000a)时,就会出现问题。我的问题是如何在PHP中将这些字符转换为常规unicode字符?

答案1

小编典典

看到输出UTF-16?有点卡住

这将转换为UTF-8:

function unescape_utf16($string) {    /* go for possible surrogate pairs first */    $string = preg_replace_callback(        ''/\\\\u(D[89ab][0-9a-f]{2})\\\\u(D[c-f][0-9a-f]{2})/i'',        function ($matches) {            $d = pack("H*", $matches[1].$matches[2]);            return mb_convert_encoding($d, "UTF-8", "UTF-16BE");        }, $string);    /* now the rest */    $string = preg_replace_callback(''/\\\\u([0-9a-f]{4})/i'',        function ($matches) {            $d = pack("H*", $matches[1]);            return mb_convert_encoding($d, "UTF-8", "UTF-16BE");        }, $string);    return $string;}

关于Python:如何获取StringIO.writelines接受unicode字符串?python接收字符串的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于c# – 从非托管unicode字符串创建SecureString、delphi – 将AnsiString转换为Unicode字符串、Java String字符串和Unicode字符相互转换代码、JSON.stringify中的Unicode字符转换为真正的Unicode字符等相关内容,可以在本站寻找。

本文标签: