我今天做了一些工作,遇到了一個「看起來很有趣」的問題。我一直在解釋一些字符串數據爲utf-8,並檢查編碼後的表單。數據來自ldap(特別是Active Directory),通過python-ldap。那裏沒有驚喜。Python UTF-16 WAVY DASH編碼問題
所以我在字節序列'\ xe3 \ x80 \ xb0'幾次,當解碼爲utf-8時,它是unicode codepoint 3030(wavy dash)。我需要utf-16中的字符串數據,所以自然我通過.encode('utf-16')轉換它。不幸的是,它似乎Python不喜歡這個角色:
D:\> python
Python 2.6.4 (r264:75708, Oct 26 2009, 08:23:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> u"\u3030"
u'\u3030'
>>> u"\u3030".encode("utf-8")
'\xe3\x80\xb0'
>>> u"\u3030".encode("utf-16-le")
'00'
>>> u"\u3030".encode("utf-16-be")
'00'
>>> '\xe3\x80\xb0'.decode('utf-8')
u'\u3030'
>>> '\xe3\x80\xb0'.decode('utf-8').encode('utf-16')
'\xff\xfe00'
>>> '\xe3\x80\xb0'.decode('utf-8').encode('utf-16-le').decode('utf-8')
u'00'
看來IronPython的是不是一個球迷之一:
D:\ipy
IronPython 2.6 Beta 2 (2.6.0.20) on .NET 2.0.50727.3053
Type "help", "copyright", "credits" or "license" for more information.
>>> u"\u3030"
u'\u3030'
>>> u"\u3030".encode('utf-8')
u'\xe3\x80\xb0'
>>> u"\u3030".encode('utf-16-le')
'00'
如果有人能告訴我,究竟是什麼,是怎麼回事,它會非常感激。
很好問的問題...與預期的人物形象的鏈接是一個很好的接觸。 – 2010-02-15 21:53:22
使用UTF-16對某些內容進行編碼,然後使用UTF-8進行解碼不太可能產生明智的結果。充其量 - 如果輸入是ASCII編碼 - 你會得到一個明智的人物,每秒鐘一次:) – 2010-02-15 22:09:49
是的,最後一行是一個混淆我很大的錯誤。謝謝。 – NoName 2010-02-15 22:19:48