本篇文章给大家谈谈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接收字符串)
- c# – 从非托管unicode字符串创建SecureString
- delphi – 将AnsiString转换为Unicode字符串
- Java String字符串和Unicode字符相互转换代码
- JSON.stringify中的Unicode字符转换为真正的Unicode字符
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
securestring ss = securestring((char*)textBlob.pbData,textBlob.cbData / 2);
这是有效的,除了UTF-16是可变长度的,所以我真的不知道用什么作为长度参数.上面的示例假定为2个字节字符(BMP),但对于其他平面,它可能最多为4个字节.我需要知道字节数组中的UTF-16字符数.如果不在内存中复制值(从而危及安全性),最好的方法是什么?我计划尽快清零并释放字节数组.
解决方法
例如,如果pbData包含(仅)代理对,则cbData将为4,并且您仍然希望传入2作为第二个参数 – 因为这是您构建securestring的System.Char值的数量.它是一个非BMP unicode字符的事实与它所代表的UTF-16 System.Char值的数量无关.
(是的,对非BMP数据的支持有点混乱,我怀疑很少有人能在任何地方做到这一点.我相信我没有.幸运的是在很多地方你都不用担心. ..)
delphi – 将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字符串的良好数据流?
谢谢您的帮助.
解决方法
更新:现在真正的问题是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环境安装后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()
函数对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字符等相关内容,可以在本站寻找。
本文标签: