繁体   English   中英

修复现有 csv unicode utf-8 没有 BOM 文件在 excel 中无法正确显示的最简单方法是什么?

[英]What is the simplest way to fix an existing csv unicode utf-8 without BOM file not displaying correctly in excel?

我的任务是将 utf-8 csv 文件转换为 excel 文件,但在 excel 中无法正确读取。 因为文件开头没有字节顺序标记(BOM)
我怎么看: https : //stackoverflow.com/a/38025106/6102332

    with open('test.csv', 'w', newline='', encoding='utf-8-sig') as f:
        w = csv.writer(f)
        # Write Unicode strings.
        w.writerow([u'English', u'Chinese'])
        w.writerow([u'American', u'美国人'])
        w.writerow([u'Chinese', u'中国人'])


但似乎这只适用于全新的文件。
但不适用于我的文件已经有数据。
有没有简单的分享方式?

除了这个还有别的办法吗? https : //stackoverflow.com/a/6488070/6102332

  1. 将导出的文件另存为 csv
  2. 打开 Excel
  3. 使用数据导入数据-->导入外部数据-->导入数据
  4. 选择“csv”文件类型并浏览到您的文件
  5. 在导入向导中将 File_Origin 更改为“65001 UTF”(或选择正确的语言字符标识符)
  6. 将分隔符更改为逗号
  7. 选择导入到的位置并完成

读入文件并使用所需的编码将其写回:

with open('input.csv','r',encoding='utf-8-sig') as fin:
    with open('output.csv','w',encoding='utf-8-sig') as fout:
        fout.write(fin.read())

utf-8-sig编解码器将在读取时删除 BOM,并在写入时添加 BOM,因此上述内容可以安全地在最初有或没有 BOM 的文件上运行。

您可以通过执行以下操作就地转换:

file = 'test.csv'

with open(file,'r',encoding='utf-8-sig') as f:
    data = f.read() 

with open(file,'w',encoding='utf-8-sig') as f:
    f.write(data)

还要注意utf16也可以工作。 一些较旧的 Excel 无法正确处理 UTF-8。

谢谢你!
我找到了一种自动处理丢失的 BOM utf-8 签名的方法。 除了缺少BOM签名之外,还有一个问题是文件数据中混杂了重复的BOM签名。 Excel 无法清晰透明地显示。 与其他数据进行比较、计算时出错。 例如:
数据 -> Excel
中文 -> Chinese
12 -> 12

对比一下,很明显ChineseBOM就不会等于中文了。 代码python解决问题:

import codecs
bom_utf8 = codecs.BOM_UTF8

def fix_duplicate_bom_utf8(file, bom=bom_utf8):
    with open(file, 'rb') as f:
        data_f = f.read()

    data_finish = bom + data_f.replace(bom, b'')

    with open(file, 'wb') as f:
        f.write(data_finish)
    return

# Use:
file_csv = r"D:\data\d20200114.csv" # American, 美国人

fix_duplicate_bom_utf8(file_csv)
 # file_csv  -> American, 美国人

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM