以一种语言特定的方式(无损地)将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'"
但是,我正在寻找一种具有良好库支持的格式,以便将第二个字符串转换回第一个字符串,以各种语言。
答案 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>Рос...</value>
)。
如果您只需要一个不需要7位安全的任意二进制表示,正如Max所提到的,只需要.encode('utf-8')
。