python处理csv文件的字符编码问题

office中可以存储两种csv文件,我称下图中橙框csv为1号,红框csv为2号

python处理csv文件的字符编码问题_第1张图片

那么怎么判断一个csv文件属于哪一种呢?

-用记事本打开csv文件,右下角显示utf-8就是1号,显示ANSI就是2号

对于1号而言

显然只能使用utf-8进行解码,代码如下

with open(file, encoding='utf-8') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

附图帮助理解:

python处理csv文件的字符编码问题_第2张图片

图1

对于2号而言

可以用gbk和ansi两种编码进行解码

另外,with open的默认解码器使用的是GBK,所以三种写法均可

# 写法1
with open(file, encoding='gbk') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

# 写法2
with open(file) as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

# 写法3
with open(file, encoding='ansi') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

解释一下为什么ansi可以但utf-8却不可以,因为记事本显示的编码格式"ANSI"有别于ASCII,它有可能会包含gbk等uft-8并不兼容的字符。详见:

Windows 记事本的 ANSI、Unicode、UTF-8 这三种编码模式有什么区别? - 知乎

你可能感兴趣的:(python,开发语言,后端)