Unicode(UTF-8)无法正确显示? (蟒蛇)

时间:2015-04-27 16:05:43

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

我在Pyhton中有以下代码:

# myFile.csv tend to looks like:
# 'a1',   'ふじさん',   'c1'
# 'a2',   'ふじさん',   'c2'
# 'a3',   'ふじさん',   'c3'

s = u"unicodeText" # unicodeText like, ふじさん بعدة أش  일본富士山Ölkələr
with codecs.open('myFile.csv', 'w+', 'utf-8') as f: # codecs open
    f.write(s.encode('utf-8', 'ignore'))
  1. 我正在使用Vim编辑代码并使用Vim打开" myFile.csv";
  2. 可以成功显示来自终端的unicode文本;
  3. 但无法从Excel或浏览器显示unicode文本;
  4. 我的平台是osx
  5. 我不知道我的配置是否有问题,或者我的编码错误,如果您有任何想法,请提供建议。非常感谢!

    open更改为codecs.open 感谢您指出f.close(),删除。

3 个答案:

答案 0 :(得分:1)

codecs.open 打开一个包装的读写器,它将为您进行编码/解码。所以你不需要编写你的字符串进行编写。你需要通过'忽略'打开电话中的参数。

with open('myFile.csv', 'w+', 'utf-8', 'ignore') as f:
    f.write(s)

请注意,在使用 with 语句时,无需调用 close

原始答案,刮擦:

open 的第三个参数是需要整数的缓冲。 您应该写下这样的编码:

with open('myFile.xls', 'w+', encoding='utf-8') as f:

请注意,您以文本模式打开文件。无需编写字符串进行编码。

您的文件模式' w +'有点奇怪。我不确定,但我认为它会截断你的文件。如果你想附加到文件,你应该使用' a'作为模式。

答案 1 :(得分:1)

您似乎尝试以文本模式打开文件(因为您指定了编码),但之后您尝试编写二进制数据(因为您在将文本写入之前对文本进行编码)文件)。您需要以二进制文件的形式打开文件并编写编码文本,或者将其作为文本打开并写入文本。

此外,您尝试将其作为文本打开甚至无法正常工作,因为您将utf-8作为缓冲参数而不是encoding参数传递。见the open() documentation`。

但是,即使你做了所有这些,这仍然无法真正帮助你使用Excel文件,因为那些具有复杂的二进制结构。我建议您使用类似xlrd的内容来阅读xls文件,并使用Xlswriter来编写它们。

这是一个适用于.csv的简单示例:

with open('file.csv', 'w', encoding='utf-8') as fh:
    fh.write('This >µ< is a unicode GREEK LETTER MU\n')

或者

with open('file.csv', 'wb') as fh:
    fh.write('This >µ< is a unicode GREEK LETTER MU\n'.encode('utf-8'))

答案 2 :(得分:1)

Excel(至少在Windows上)在.csv文件的开头喜欢Unicode BOM,即使使用UTF-8也是如此。有一个编解码器,utf-8-sig

此外,只需要Python 3的正常openf.close()中不需要with

#coding:utf8
data = '''\
a1,ふじさん,c1
a2,ふじさん,c2
a3,ふじさん,c3
'''
with open('myFile.csv', 'w', encoding='utf-8-sig') as f:
    f.write(data)