2011-11-08 35 views
0

以無特定語言的方式(無損)將Unicode轉換爲較低字節編碼(8位)的最佳方式是什麼?我想要一個標準的格式,即廣泛的庫支持雙向轉換。以非特定語言的方式將Unicode轉換爲低位字節編碼?

如果我使用Python,我會用再版:

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

缺貨[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 \ 86 \ XD0 \ XB8 \ XD1 \ X8F'」

如果是這樣的你看到的是,你的終端設置錯誤,它將UTF-8輸入視爲ISO-8859-1(或者在Windows控制檯的情況下是cp1252,這是無法正確設置的)。

Российская Федерация正確的Python的再版將是Unicode的文字:

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

,因爲它發生哪如果你想要一個7是相當接近的JavaScript/JSON字符串字面

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

一個Unicode字符串的位安全(ASCII)表示,JSON是一種合理的格式選擇。通過使用json.dumps()來獲得它,而不是剽竊Python repr,因爲這兩種格式之間存在一些細微的不一致。

您可以嘗試的其他很好理解的ASCII表示可能包括URL編碼(%D0%A0%D0%BE...)和XML字符轉義(<value>&#x0420;&#x043e;&#x0441;...</value>)。

如果您只需要一個任意的二進制表示,並不需要像7位安全的那樣,就像Max提到的那樣,只需要.encode('utf-8')

2

UTF-8,UTF-16和UTF-32都是標準配置。也許UTF-8在互聯網上最常見; Windows和Java在內部使用UTF-16。任何具有Unicode支持的語言都將具有編碼和解碼功能。在Python中,您可以使用Unicode字符串的.encode方法和字符串的方法在它們之間進行轉換。

如果你需要7位乾淨的東西(沒有設置第8位),還有UTF-7。

相關問題