以特定语言将Unicode转换为低阶字节编码?

时间:2011-11-08 08:35:55

标签: unicode encoding

以一种语言特定的方式(无损地)将Unicode转换为低阶字节编码(8位)的最佳方法是什么?我想要一种标准的格式,即对两个方向的转换都有广泛的库支持。

如果我使用的是Python,我会使用repr:

In [1]: x = u"Российская Федерация"

In [2]: repr(x)
Out[2]: "u'\\xd0\\xa0\\xd0\\xbe\\xd1\\x81\\xd1\\x81\\xd0\\xb8\\xd0\\xb9\\xd1\\x81\\xd0\\xba\\xd0\\xb0\\xd1\\x8f \\xd0\\xa4\\xd0\\xb5\\xd0\\xb4\\xd0\\xb5\\xd1\\x80\\xd0\\xb0\\xd1\\x86\\xd0\\xb8\\xd1\\x8f'"

但是,我正在寻找一种具有良好库支持的格式,以便将第二个字符串转换回第一个字符串,以各种语言。

2 个答案:

答案 0 :(得分:2)

UTF-8,UTF-16和UTF-32都是标准配置。也许UTF-8在互联网上最常见; UTF-16由Windows和Java在内部使用。任何支持Unicode的语言都将具有所有这些语言的编码和解码功能。在Python中,您可以使用unicode字符串的.encode方法和字符串的.decode方法在它们之间进行转换。

如果你需要7位干净的东西(没有设置第8位),那么还有UTF-7。

答案 1 :(得分:2)

  

输出[2]:&#34; u&#39; \ xd0 \ xa0 \ xd0 \ xbe \ xd1 \ x81 \ xd1 \ x81 \ xd0 \ xb8 \ xd0 \ xb9 \ xd1 \ x81 \ xd0 \ xba \ xd0 \ xb0 \ xd1 \ x8f \ xd0 \ xa4 \ xd0 \ xb5 \ xd0 \ xb4 \ xd0 \ xb5 \ xd1 \ x80 \ xd0 \ xb0 \ xd1 \ x86 \ xd0 \ xb8 \ xd1 \ x8f&#39;&#34; < / p>

如果你看到了什么,你的终端设置错误,它将UTF-8输入视为ISO-8859-1(或者在Windows控制台的情况下是cp1252,这是&n&n #39; t可以设置正确。)

Российская Федерация的正确Python repr将是Unicode文字:

u'\u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0430\u044f \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044f'

它恰好与JavaScript / JSON字符串文字

非常接近
"\u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0430\u044f \u0424\u0435\u0434\u0435\u0440\u0430\u0446\u0438\u044f"

如果您想要一个Unicode字符串的7位安全(ASCII)表示,JSON是一种合理的格式选择。使用json.dumps()获取它,而不是攻击Python repr,因为这两种格式之间存在一些微妙的不一致。

您可以尝试的其他易于理解的ASCII表示可能包括URL编码(%D0%A0%D0%BE...)和XML字符转义(<value>&#x0420;&#x043e;&#x0441;...</value>)。

如果您只需要一个不需要7位安全的任意二进制表示,正如Max所提到的,只需要.encode('utf-8')