在用python编码的时候,想把一txt文件里面的东西,插入到excel表格中,结果出现了UnicodeDecodeError: ‘utf8’ codec can’t decode byte 0xd1 in position 0: invalid continuation byte问题
解决方式:在创建表后,加入
(1) workbook = xlwt.Workbook(encoding=’utf-8’, style_compression=0)
之后发现还有问题,又加入了
(2)import sys
reload(sys)
sys.setdefaultencoding(“gbk”)
但是还是不行,原来是txt文件本身的问题
(3)用notepad++打开后转为utf-8格式后就可以了
(2)其实不需要,只需要(1)(3)即可解决问题
代码如下:
# -*- coding: utf-8 -*-:
import xlwt
from numpy import *
def f():
#打开txt文件
fr = open("C:/Users/Administrator/Desktop/test.txt")
#读取文件内容
arrayOfLines = fr.readlines()
#获取文件长度,即共多少行
numberOfLines = len(arrayOfLines)
#创建Excel文件
workbook = xlwt.Workbook
#设置编码格式
workbook = xlwt.Workbook(encoding='utf-8', style_compression=0)
#创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格
sheet = workbook.add_sheet('students', cell_overwrite_ok=True)
index = 1
#设置第一行表头
sheet.write(0, 0, "学号")
sheet.write(0, 1, "姓名")
sheet.write(0, 2, "性别")
sheet.write(0, 3, "专业")
sheet.write(0, 4, "班级")
#向excel插入数据
for line in arrayOfLines:
line = line.strip()
listFromLine = line.split(' ')
for i in range(5):
sheet.write(index, i, listFromLine[i])
index += 1
workbook.save('C:/Users/Administrator/Desktop/students.xls')
f()
注:
GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码
GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名
cp936:中文本地系统是Windows中的cmd,默认codepage是CP936,cp936就是指系统里第936号编码格式,即GB2312的编码。
(当然有其它编码格式:cp950 繁体中文、cp932 日语、cp1250 中欧语言。。。)
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
UTF-8 (8-bit Unicode Transformation Format)是最流行的一种对 Unicode 进行传播和存储的编码方式。它用不同的 bytes 来表示每一个代码点。ASCII 字符每个只需要用一个 byte ,与 ASCII 的编码是一样的。所以说 ASCII 是 UTF-8 的一个子集。