尝试在Python 2.7中将行写入文本文件,并具有以下代码:
# -*- coding: utf-8 -*-
...
f = open(os.path.join(os.path.dirname(__file__), 'output.txt'), 'w')
f.write('Smith’s BaseBall Cap') // Note the strangely shaped apostrophe
但是,在output.txt中,我得到了Smith‚Äôs BaseBall Cap
。不确定如何纠正这个编码问题?有这类问题的任何原因吗?
答案 0 :(得分:11)
您已声明您的文件使用UTF-8进行编码,因此您的字节字符串文字为UTF-8。卷曲撇号是U+2019。在UTF-8中,它被编码为三个字节,\ xE2 \ x80 \ x99。这三个字节将写入输出文件。然后,当您检查输出文件时,它被解释为UTF-8以外的其他内容,而您会看到三个不正确的字符。
在Mac OS Roman中,这三个字节显示为‚Äô
。
您的文件是正确的UTF-8文件,但您查看的文件不正确。
答案 1 :(得分:1)
有几种可能性,但要检查的第一个是输出文件实际上包含您的想法。您确定没有使用错误的编码查看文件吗?有些编辑可以选择你正在查看文件的编码。编辑器需要知道文件的编码,如果它将文件解释为UTF-8以外的其他编码,它甚至会显示错误的内容虽然文件的内容是正确的。
当我运行你的代码时(在Python 2.6上),我在文件中得到了正确的输出。要尝试的另一件事:使用codecs
模块打开UTF-8文件的文件:f = codecs.open("file.txt", "w", "utf-8"). Then declare the string as a unicode string with
u“'Smith的BaseBall Cap'”``。