将 unicode 符号写入文件(与 unicode 代码相反)
Writing unicode symbols to files (as opposed to unicode code)
我是 python 的新手,unicode 开始让我头疼。
目前我这样写文件:
my_string = "马/馬"
f = codecs.open(local_filepath, encoding='utf-8', mode='w+')
f.write(my_string)
f.close()
当我用 Gedit 打开文件时,我可以看到类似这样的内容:
\u9a6c/\u99ac\tm\u01ce
虽然我想看看我写的到底是什么:
马/馬
我尝试了几种不同的变体,比如写 my_string.decode() 或 my_string.encode('utf-8') 而不是 my_string,我知道这两种方法是相反的,但我不确定我需要哪一个。无论如何都没有用。
如果我手动将这些符号写入文本文件,然后使用 python 读取文件,将我刚刚读取的内容重写回同一个文件并保存,符号将变成代码 \ u9a6c。不确定这是否重要,我想我只是提到它以帮助确定问题。
Edit: 字符串来自SQL Alchemy objects repr方法,原来是问题所在.我没有提到它,因为它只是没有发生在我身上,它可能以某种方式与问题相关。再次感谢你的帮助!
从评论中可以清楚地看出您正在直接使用 repr()
function or calling the object.__repr__()
method。
不要那样做。您正在将调试信息写入您的文件:
>>> my_string = u"马/馬"
>>> print repr(my_string)
u'\u9a6c/\u99ac'
产生的值可以粘贴回 Python 会话,因此您可以重新产生完全相同的值,因此它是 ASCII 安全的(因此它可以在 Python 2 个没有编码问题的源代码)。
来自 repr()
文档:
For many types, this function makes an attempt to return a string that would yield an object with the same value when passed to eval()
, otherwise the representation is a string enclosed in angle brackets that contains the name of the type of the object together with additional information often including the name and address of the object.
改为直接将 Unicode 对象写入您的文件,如果您这样做,codecs.open()
会正确处理 UTF-8 编码。
我是 python 的新手,unicode 开始让我头疼。
目前我这样写文件:
my_string = "马/馬"
f = codecs.open(local_filepath, encoding='utf-8', mode='w+')
f.write(my_string)
f.close()
当我用 Gedit 打开文件时,我可以看到类似这样的内容:
\u9a6c/\u99ac\tm\u01ce
虽然我想看看我写的到底是什么:
马/馬
我尝试了几种不同的变体,比如写 my_string.decode() 或 my_string.encode('utf-8') 而不是 my_string,我知道这两种方法是相反的,但我不确定我需要哪一个。无论如何都没有用。
如果我手动将这些符号写入文本文件,然后使用 python 读取文件,将我刚刚读取的内容重写回同一个文件并保存,符号将变成代码 \ u9a6c。不确定这是否重要,我想我只是提到它以帮助确定问题。
Edit: 字符串来自SQL Alchemy objects repr方法,原来是问题所在.我没有提到它,因为它只是没有发生在我身上,它可能以某种方式与问题相关。再次感谢你的帮助!
从评论中可以清楚地看出您正在直接使用 repr()
function or calling the object.__repr__()
method。
不要那样做。您正在将调试信息写入您的文件:
>>> my_string = u"马/馬"
>>> print repr(my_string)
u'\u9a6c/\u99ac'
产生的值可以粘贴回 Python 会话,因此您可以重新产生完全相同的值,因此它是 ASCII 安全的(因此它可以在 Python 2 个没有编码问题的源代码)。
来自 repr()
文档:
For many types, this function makes an attempt to return a string that would yield an object with the same value when passed to
eval()
, otherwise the representation is a string enclosed in angle brackets that contains the name of the type of the object together with additional information often including the name and address of the object.
改为直接将 Unicode 对象写入您的文件,如果您这样做,codecs.open()
会正确处理 UTF-8 编码。