[英]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
- 将导出的文件另存为 csv
- 打开 Excel
- 使用数据导入数据-->导入外部数据-->导入数据
- 选择“csv”文件类型并浏览到您的文件
- 在导入向导中将 File_Origin 更改为“65001 UTF”(或选择正确的语言字符标识符)
- 将分隔符更改为逗号
- 选择导入到的位置并完成
读入文件并使用所需的编码将其写回:
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.