美文网首页Python
Python 中文日文汉字乱码处理utf-8-sig

Python 中文日文汉字乱码处理utf-8-sig

作者: 8251d0cd9fde | 来源:发表于2019-02-27 13:57 被阅读6次

例如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这种编码

相关文章

网友评论

    本文标题:Python 中文日文汉字乱码处理utf-8-sig

    本文链接:https://www.haomeiwen.com/subject/xjzxuqtx.html