簡體   English   中英

什么是在python中確定unicode字符串的解碼方法的最佳方法

[英]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將包含垃圾。

所以你(可能)想要做的是:

  1. 確定數據源的編碼 - 可能使用Shadyabhi的方法之一
  2. 根據(1)解碼數據,將其保存在python unicode字符串中
  3. 使用原始編碼(如果這符合您的需要)或您選擇的其他編碼對其進行編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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