如何将unicode日文从一个文件写入另一个文件?

时间:2019-01-09 09:50:26

标签: python python-3.x file python-unicode

我有一些json文件,并且文件中有一些编码为日语的地方,例如\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831,我想将其解码为日语。

问题是当我使用此方法时:

text = '\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831'
print(text)

它打印了

本・雑誌・書籍情報

但是,例如,当我直接从文件中读取文件时,准备的文件是index.json,其内容仅为:

\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831

我使用的方法是

file = open('index.json','r')
text = file.read()
print(text)

它刚刚打印

\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831

我发现有点奇怪的是,当我尝试打印时:

print(file.read())
print(text)

file.read()不返回任何内容,即使使用file.read(1)也是如此。

编辑:我发现主要问题是当您编写text = '\u672c'时,python会将\u672c识别为单个字符。但是,当您从文件中读取文件时,它将识别为包含6个字符的字符串。反正要转换吗?

1 个答案:

答案 0 :(得分:2)

这里有几个问题。

假设您的文件包含以下(文字)文本:

\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831

您可以在Python中将其表示为

text = '\\u672c\\u30fb\\u96d1\\u8a8c\\u30fb\\u66f8\\u7c4d\\u60c5\\u5831'

OR

text = r'\u672c\u30fb\u96d1\u8a8c\u30fb\u66f8\u7c4d\u60c5\u5831'

要将文字转义符转换为它们代表的Unicode字符,您需要对其进行正确解码:

text.encode('ascii').decode('unicode-escape')

产生

本・雑誌・書籍情報

file.read()file.read(1)对您不起作用的原因是文件不会自动后退。读完文件后,它就结束了,直到您手动倒带或关闭并重新打开它为止。