[英]What's the best way to determine decoding method of a unicode string in python
我想知道如何確定unicode的編碼。
我知道我已經在某個地方讀到了這個,我只是不記得是否可能,但我想相信有一種方法。
假設我有一個帶有latin-1編碼的unicode,我想用解碼時使用的相同編碼動態編碼它...
坦率地說,我想把它變成一個utf-8 unicode而不會弄亂角色,然后才能使用它。
即:
latin1_unicode = 'åäö'.decode('latin-1')
utf8_unicode = latin.encode('latin-1').decode('utf-8')
如果在“確定unicode的編碼”中,“unicode”是python數據類型,那么就不能這樣做,因為“encoding”是指在輸入時表示字符串的原始字節模式(例如,從一個文件,一個數據庫,你的名字)。 當它成為python'unicode'類型(內部表示)時,字符串要么在行后面解碼,要么拋出解碼異常,因為字節序列與系統編碼不相符。
Shadyabhi的答案指的是你從文件中讀取字節的(常見)情況(你可能很好地填充字符串 - 而不是python unicode字符串)並且需要猜測它們保存的編碼。 嚴格來說,你不能擁有“latin1 unicode python string”:unicode python字符串沒有編碼(編碼可以定義為將字符轉換為字節模式並解碼為反向過程的過程;解碼后的sring因此沒有編碼 - 盡管它可以以多種方式編碼以用於存儲/外部表示目的)。
例如在我的機器上:
In [35]: sys.stdin.encoding
Out[35]: 'UTF-8'
In [36]: a='è'.decode('UTF-8')
In [37]: b='è'.decode('latin-1')
In [38]: a
Out[38]: u'\xe8'
In [39]: b
Out[39]: u'\xc3\xa8'
In [41]: sys.stdout.encoding
Out[41]: 'UTF-8'
In [42]: print b #it's garbage
è
In [43]: print a #it's OK
è
這意味着,在您的示例中,如果默認編碼恰好是UTF-8或UTF-16,或者與latin1不同的任何內容,則latin1_unicode將包含垃圾。
所以你(可能)想要做的是:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.