python 中的编码问题简直就是一个大坑。
最近用到了csv存入微信数据,并且从csv读出处理,由于微信中昵称、签名等往往含有无法识别字符,导致编码问题严重。
因此分享一下心得,减少入坑时间。。
一、csv文件写入问题
encode('gbk', 'ignore').decode('gbk')
写入时由于含有无法识别字符,导致写入失败(编码错误),此时,需要过滤掉该字符,通过encode('gbk', 'ignore').decode('gbk')方法
完整写入过程:
# 写入csv
csvfile = open('friend2.csv', 'w', newline='') # , encoding='utf-8'
writer = csv.writer(csvfile)
writer.writerow(['name', 'city', 'male', 'star', 'signature', 'remark', 'alias', 'nick'])
for Member in MemberList:
# 写入csv
writer.writerow([name.encode('gbk', 'ignore').decode('gbk'), city.encode('gbk', 'ignore').decode('gbk'),
Member['Sex'],
Member['StarFriend'], sign.encode('gbk', 'ignore').decode('gbk'),
remark.encode('gbk', 'ignore').decode('gbk'),
alias.encode('gbk', 'ignore').decode('gbk'),
nick.encode('gbk', 'ignore').decode('gbk')])
csvfile.close()
Excel也可以正常查看csv文件,没有乱码。
二、csv文件读取问题
1.一个简单的读取
with open('../friend2_v2.csv', newline='') as csvfile: reader = csv.reader(csvfile, delimiter=':', quotechar='|') for row in reader: print(', '.join(row)) csvfile.close()
2.利用pandas库的读取
import pandas as pd df = pd.read_csv('friend2_v2.csv', encoding="ISO-8859-1") # 奇怪的编码只需要加上
encoding="ISO-8859-1"
这句奇怪的编码就可以正常读取。
否则会有解码报错如下:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid continuation byte
此处参考自:http://stackoverflow.com/questions/18171739/unicodedecodeerror-when-reading-csv-file-in-pandas-with-python