将unicode符号写入文件(与unicode代码相对)

时间:2015-02-09 13:56:08

标签: python python-2.7 unicode 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。不确定这是否是importat,我想我只是提到它来帮助识别问题。

编辑:字符串来自SQL Alchemy对象 repr 方法,结果证明是问题所在。我没有提到它,因为它只是没有发生在我身上它可能与某种程度上的问题有关。再次感谢你的帮助!

1 个答案:

答案 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的编码。