2017-08-03 110 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