2017-08-03 144 views
0

我正在讀取從某個庫中檢索的pickle文件。在unicode字符串中存儲了很多utf-8字符。例如:python打印存儲在unicode字符串中的utf-8字符

u'\xc4\x91' #đ 
u'\xc3\xad' #í 
u'\xc3\u017d' #�\u017d 
... 

我可以編碼和使用raw_unicode_escape 然而所有的字符與\u逃逸像第三個以上顯示不正確顯示大部分:�\u017d。我該如何解決這個問題? 編輯: 每個字符串上面應該是一個性格

編輯2:我用它來讀取文件

model_dir = '../../projects/python/test/model-5' 
with open(model_dir, 'rb') as f: 
    model = pickle.load(f) 
seq = model.sequitur 
rightI = seq.rightInventory 
print repr(rightI.list) 
代碼

結果中包含類似上述例子

+0

你是什麼意思不正確?你能舉個例子嗎? –

+0

也許你在控制檯編碼方面有問題?嘗試將您的輸出寫入文件而不是標準輸出。 – damians

+0

@LaurynasTamulevičius我剛剛根據你的要求添加了 – AtheS21

回答

0

試試這也許是

PYTHONIOENCODING="utf8" python script.py 
+0

它不起作用:( – AtheS21

0

你有一個Unicode轉義字符串。如果你打印出來,和控制檯的字體和編碼的支持它,你將看到以下內容:

>>> sys.stdout.encoding 
'UTF-8' 
>>> sys.getfilesystemencoding() 
'UTF-8' 
>>> i 
[u'\xc4\x91', u'\xc3\xad', u'\xc3\u017d'] 
>>> for q in i: 
... print(q) 
... 
Ä 
í 
ÃŽ 

,以確保它們被渲染(印在屏幕上)正確,你需要確保:

  • 該文件的編碼對於在文件中輸入的數據是正確的。
  • 終端的編碼和字體支持字形

如果你看到這意味着宣佈該應用程序的編碼不支持特定的代碼點,所以該系統不知道如何使它。

+0

你可能誤解了我,當我說我有UTF-8字符存儲在unicode字符串中,我的意思是它應該是''\ xc4 \ x91''(沒有前綴u),但是在加載從pickle開始,它們變成unicode,所以爲了正確地打印它們,我必須使用'encode(raw_unicode_escape)'將它們轉換回str,並且我可以保證終端能夠顯示該字符,我只是 – AtheS21

+0

@ ATheS21然後你做了一個不正確的轉換,這不是你應該做的。 – Gribouillis

+0

@BurhanKhalid我想'sys.getfilesystemencoding()'是關於系統上文件名的編碼。可能與輸入/輸出編碼不同,還有'sys.stdout.encoding' – Gribouillis