UnicodeDecodeError: 'utf8' codec can't decode byte 0xd1 in position 0: invalid continuation byte问题

时间:2023-01-06 11:58:03

在用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 的一个子集。