2016-11-16 144 views
2

我正在使用python 2.7.12 我有一個字符串,它包含unicode文字,它不是Unicode類型。我想將其轉換爲文本。這個例子解釋了我想要做的。Python 2.7,將utf8字符串轉換爲ascii

>>> s 
'\x00u\x00s\x00e\x00r\x00n\x00a\x00m\x00e\x00' 
>>> print s 
username 
>>> type(s) 
<type 'str'> 
>>> s == "username" 
False 

我該如何去轉換這個字符串?

回答

1

這不是UTF-8,它是UTF-16,雖然目前還不清楚它是大端還是小端(沒有BOM,並且有一個前導和尾隨的NUL字節,使其長度不均勻)。對於ASCII範圍內的文本,UTF-8與ASCII無法區分,而UTF-16將NUL字節與ASCII編碼的字節交替(如您的示例中所示)。

在任何情況下,轉換爲純ASCII是相當容易的,你只需要對付長短不均這樣或那樣:

s = 'u\x00s\x00e\x00r\x00n\x00a\x00m\x00e\x00' # I removed \x00 from beginning manually 
sascii = s.decode('utf-16-le').encode('ascii') 

# Or without manually removing leading \x00 
sascii = s.decode('utf-16-be', errors='ignore').encode('ascii') 

當然,如果你輸入的只是NUL穿插ASCII,您可以「T弄清楚字節序或如何得到一個偶數字節,你可以欺騙:

sascii = s.replace('\x00', '') 

但在輸入一些完全不同的編碼的情況下,不會引發異常,因此它可能隱藏指定你期望會被捕獲的錯誤。