2013-01-23 67 views
2

我似乎無法使用內置的open()函數(堆棧跟蹤顯示)在Python 3.3下解碼UCS-2 BE文件UnicodeDecodeError幷包含我的readLine()方法) - 實際上,我無法找到指定此編碼的標誌。Python 3:讀取UCS-2(BE)文件

使用Windows 8,終端設置爲代碼頁65001,使用'Lucida Console'字體。

代碼段將不會是太大的幫助,我想:

def display_resource(): 
    f = open(r'D:\workspace\resources\JP.res', encoding=<??tried_several??>) 
    while True: 
     line = f.readline() 
     if len(line) == 0: 
      break 

知人任何洞察到這一問題。

回答

10

UCS-2 is UTF-16實際上,對於在任何情況下仍被稱爲UCS-2時分配的任何代碼點。

encoding='utf16'打開它。如果沒有物料清單(Byte order mark,開始時爲2個字節,BE爲\xfe\xff),則使用encoding='utf_16_be'強制字節順序。

+0

Hello Martijn,我也認爲UTF16應該工作(基於你鏈接的同一篇文章)。它的工作原理就像utf_16_be一樣,我在屏幕上顯示了所有日文字母的相同字符 - 例如「ブラウザー」變成了一堆相同的「不可讀」字符(正方形)。我應該再次在兩者之間做出區分 - 閱讀並打印它。這也是終端的限制嗎?展望未來,如果閱讀工作正常,我可以使用字符串,然後我可以將它們寫回另一個UCS2文件,並在UCS2-enabledEditor中獲得「正確」輸出? –

+0

恐怕這是終端的限制。你的字體不支持這些字符;你必須找到一個不同的字體。僅僅因爲終端無法顯示它們並不意味着數據本身已經被損壞,所以是的,如果您在寫入文件時編碼回UTF-16,則可以使用其他工具重新打開它。 –

+0

謝謝Martijn。非常感激! –