2017-07-20 156 views
0

我有一个这样的文件:如何读取包含16位十六进制值的文件?

\u9515\u7691\u853c\u788d\u7231 
\u9515\u7691\u853c\u788d\u7231 
\u9515\u7691\u853c\u788d\u7231 

现在我想读这个文件打印字符串,我这样做是这样的:

with open(fi, "rb") as fi: 
    print(fi.readline().strip().decode("utf-8")) 

,但我发现它仍然打印

\u9515\u7691\u853c\u788d\u7231 

我怎样才能得到真正的字符串:

锕皑蔼碍爱 

回答

3

您可以使用unicode-escape

line = "\\u9515\\u7691\\u853c\\u788d\\u7231" 
print line.decode("unicode-escape") 
0

您的解码函数将您的数据视为常规字符串。试着做这样的:

with open(fi, "rb") as fi: 
    data = fi.readline().strip() 
    encode_data = data.encode("utf-8") 
    print(encode_data.decode("utf-8") 
+0

这个答案在python3中不起作用 – roger

+0

你确定你在使用python3吗? @Ankush Rathi答案不适用于我的python3:D 可以粘贴错误吗? – avix

+0

它工作得很好,只是改变语法 – roger

0

或者解码你的字符串,因为这是一个Python逃脱字符串,可以使用ast.literal_eval

line = r"\u9515\u7691\u853c\u788d\u7231" 
print(ast.literal_eval('u"' + line + '"') 

给如预期的那样:

锕皑蔼碍爱 
+0

我得到这样的错误:'AttributeError:module'ast'没有属性'litteral_eval'' – roger

+0

@roger:我的坏。它是'literal_eval'和一个't'。固定。 –

+0

我测试它在python3,它工作正常,但在python2,它不 – roger

相关问题