我是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。不确定这是否是importat,我想我只是提到它来帮助识别问题。
编辑:字符串来自SQL Alchemy对象 repr 方法,结果证明是问题所在。我没有提到它,因为它只是没有发生在我身上它可能与某种程度上的问题有关。再次感谢你的帮助!
答案 0 :(得分:1)
从评论中可以清楚地看到,您正在使用repr()
function或直接致电object.__repr__()
method。
>>> my_string = u"马/馬"
>>> print repr(my_string)
u'\u9a6c/\u99ac'
生成的值可以回溯到Python会话中,因此您可以重新生成完全相同的值,因此它是ASCII安全的(因此它可以在Python 2源代码中使用而不会出现编码问题)
来自repr()
文档:
对于许多类型,此函数尝试返回一个字符串,该字符串在传递给
eval()
时会产生具有相同值的对象,否则表示形式是包含在尖括号中的字符串,其中包含对象的类型以及通常包括对象的名称和地址的附加信息。
直接将Unicode对象写入您的文件,codecs.open()
可以正确处理UTF-8的编码。