【问题标题】:Writing to excel string in encoding UTF-16以UTF-16编码写入excel字符串
【发布时间】:2013-08-17 01:13:04
【问题描述】:

我正在encoding UTF-16 模式下打开文本文件:

with open(file.txt, 'r', encoding="UTF-16") as infile:

然后我想写入一个excel文件:

from csv import writer
excelFile = open("excelFile_1.csv", 'w', newline='') 
write = writer(excelFile, delimiter=',')
write.writerows([[input]])

其中input 是文本文件file.txt 中的一个术语

我收到以下错误

UnicodeEncodeError: 'charmap' codec can't encode character '\xe9' in position 113: character maps to <undefined>

使用 Python 3.2

【问题讨论】:

    标签: python csv unicode python-3.x


    【解决方案1】:

    您还需要为 CSV 文件选择一个输出编码:

    excelFile = open("excelFile_1.csv", 'w', newline='', encoding='UTF16') 
    

    您系统的默认编解码器无法处理您从输入文件名读取的代码点。

    在 Excel 中打开此文件可能不起作用;请遵循this answer 中的过程,选择 UTF16 编解码器,以确保 Excel 正确读取文件。

    您也可以尝试使用 UTF-8,在文件开头添加 UTF-8 BOM:

    excelFile = open("excelFile_1.csv", 'w', newline='', encoding='UTF8')
    excelFile.write('\ufeff')  # Zero-width non-breaking space, the Byte Order Mark
    

    在 UTF-8 文件中使用 BOM 的主要是 Microsoft 软件,因为 UTF-8 与 UTF-16 和 UTF-32 不同,只有 一个 字节顺序可供选择,但显然让 Excel 开心(呃)。

    【讨论】:

    • 我尝试了第二个选项,可以很好地使用excel的常规打开,我不需要添加“\ufeff”。
    • @user1869297 它可以在没有 BOM 的情况下工作,直到文件中有一些实际的 Unicode 非 ASCII 字符。我知道你知道这个 Martijn,但在这种情况下,BOM 的目的不是表示字节顺序,而是将文件标记为 UTF-8 编码,而不是微软仍然喜欢的古老代码页编码之一。跨度>
    • @MarkRansom:是的,我知道,微软必须支持太多的遗留编解码器。请注意,OP 确实在输出中具有 Latin-1 范围内的代码点,这就是它们首先出现错误的原因。
    猜你喜欢
    • 2012-10-12
    • 2014-01-18
    • 2023-04-11
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-09
    • 2014-05-11
    相关资源
    最近更新 更多