[英]Converting unicode string to utf-8
首先,我知道關於Python 2.x中的字符串的en / de-coding的問題很多,但是我似乎找不到解決此問題的方法。
我有一個unicode字符串,其中包含字母č
,它表示為\Ä\
如果在Python控制台中我寫
>>> a = u"\u00c4\u008d"
>>> print a
我打印了兩個奇怪的字符,而不是č
,這可能是因為該字符串的實際編碼應該是UTF-8。 因此,我嘗試使用.decode("utf-8")
但是為此,我得到了標准的UnicodeEncodeError
。
您知道我如何讓Python在控制台中將該字符串打印為č
嗎?
非常感謝
č
不以u'\Ä\'
。 這兩個十六進制值是UTF-8編碼的值,因此應在字節字符串中寫為'\\xc4\\x8d'
。 例:
>>> s = '\xc4\x8d'
>>> s.decode('utf8')
u'\u010d'
>>> print(s.decode('utf8'))
č
警告:您的終端必須配置有支持字符的編碼才能正確打印,否則您將看到UnicodeEncodeError
。
如果由於某種原因您的Unicode字符串解碼錯誤,則可以利用Unicode的前256個代碼點與latin1
編碼相關聯並對其進行修復的事實:
>>> s = u'\u00c4\u008d'
>>> s.encode('latin1')
'\xc4\x8d'
>>> s.encode('latin1').decode('utf8')
u'\u010d'
>>> print(s.encode('latin1').decode('utf8'))
č
如果您有一個錯誤解碼的Unicode字符串,則應顯示您擁有的文件或讀取該文件的代碼並解決該問題。
與python戰斗了一個多小時后,我決定尋找另一種語言的解決方案。 這就是我在C#中可以實現的目標:
var s = "\u00c4\u008d";
var newS = Encoding.UTF8.GetString(Encoding.Default.GetBytes(s));
File.WriteAllText(@"D:\tmp\test.txt", newS, Encoding.UTF8);
最后! 文件現在包含č
。
因此,我受到了C#中這種方法的啟發,並設法提出了以下(看似)等效的Python解決方案:
>>> s = u"\u00c4\u008d"
>>> arr = bytearray(map(ord, s))
>>> print arr.decode("utf-8")
č
我不確定這個解決方案有多好,但是對於我來說似乎可行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.