簡體   English   中英

將unicode字符串轉換為utf-8

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM