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

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

那么怎么判断一个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)

附图帮助理解:

图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 这三种编码模式有什么区别? - 知乎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值