例如pandas读取Excel转化为csv文件,入力文件含有日语。
使用encoding='utf-8'的话,出力的CSV文件仍旧是乱码。
使用encoding='utf-8-sig'则不会乱吗
import pandas as pd
def test():
data_xls = pd.read_excel('台帳②.xlsx', index_col=0)
data_xls.to_csv('台帳②.csv', encoding='utf-8-sig')
if __name__ == '__main__':
test()
一、UTF-8
utf-8以字节为编码单元,它的字节顺序在所有系统中都是一様的,没有字节序的问题,也因此它实际上并不需要BOM(“ByteOrder Mark”)
二、utf-8-sig
但是UTF-8 with BOM即utf-8-sig需要提供BOM("ByteOrder Mark")。
即 utf-8-sig是对字节编码有序的。
三、为什么需要utf-8-sig
因为在UNIX环境下,很多的UNIX程序不认识BOM。
主要是在UNIX所有脚本语言首行为#!标示,它依赖于shell解析。
而很多shell出于兼容的考虑不检测BOM,所以加进BOM时shell会把它解释为某个普通字符输入导致破坏#!标示。
比如很多现代脚本语言,例如python,其解释器本身是能处理BOM的,但是shell卡在这里。
因此我们在linux服务器上读取这些txt文件时,会遇到如下报错:
\xef\xbb\xbf…
这种情况要考虑使用utf-8-sig这种编码
网友评论