CDHH55 2021-10-08 01:14 采纳率: 33.3%
浏览 71

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 8 中文字符无法进行decode('gbk')解码

读取文件:

fbook1 = open("MOOC PYTHON\TeleAddressBook.txt","rb")

对元素进行解码并添加进列表:

list1_name.append(str(elements[0].decode('gbk')))

报错:

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 8: incomplete multibyte sequence

请问大家如何解决这个无法decode的问题
完整代码(合并两个文件)如下:

fbook1 = open("MOOC PYTHON\TeleAddressBook.txt","rb") # 二进制读取 因为文件中有中文,所以避免乱码用rb
fbook2 = open("MOOC PYTHON\EmailAddressBook.txt","rb")

fbook1.readline() # 跳过第一行
fbook2.readline()
lines1 = fbook1.readlines()
lines2 = fbook2.readlines()

list1_name = [] # 建立空列表来存储姓名电话email
list1_tele = []
list2_name = []
list2_email = []

for line in lines1:
    elements = line.split() # 用空格区分的元素
    list1_name.append(str(elements[0].decode('gbk'))) # 姓名和电话分别储存临时列表 中文字符进行decode('gbk')解码
    list1_tele.append(str(elements[1].decode('gbk')))
for line in lines2:
    elements = line.split() 
    list2_name.append(str(elements[0].decode('gbk'))) # 姓名和电话分别储存临时列表 中文字符进行decode('gbk')解码
    list2_email.append(str(elements[1].decode('gbk')))

# 合并处理
lines = []
lines.append('姓名\t  电话\t   邮箱\n') # \t 空格
# 处理列表1
for i in range(len(list1_name)):
    s = ''
    if list1_name[i] in list2_name:
        j = list2_name.index(list1_name) # 找到姓名列表1对应列表2中的姓名的位置序号!
        s = '\t'.join([list1_name[i], list1_tele[i], list2_email[j]]) # join([]) 这个[]是干嘛的
        s += '\n'
    else:
        s = '\t'.join([list1_name[i], list1_tele[i], str('    -----    ')])
        s += '\n'
    lines.append(s)
# 处理列表2中剩下的没有遍历的姓名
for i in range(len(list2_name)):
    s = ''
    if list2_name[i] not in list1_name:
        s = '\t'.join([list2_name[i], str('    -----    '), list2_email[i]])
        s += '\n'
    lines.append(s)
# 将新生成的合并数据写入新的文件中
fbook3 = open('MOOC PYTHON\AddressBook.txt','w')
fbook3.writelines(lines)

fbook1.close()
fbook2.close()
fbook3.close()
print('The addressBooks are merged!')
  • 写回答

1条回答 默认 最新

  • 想上天的狗 2021-10-08 02:06
    关注
    open("MOOC PYTHON\EmailAddressBook.txt","rb")
    

    改为

    open("MOOC PYTHON\EmailAddressBook.txt","rb",encoding='utf-8')
    

    要是utf-8不行的话,你可以改成其他的试试,uft-8-sig,bytes,gbk等等

    评论

报告相同问题?

问题事件

  • 创建了问题 10月8日

悬赏问题

  • ¥15 python实现CAD识图
  • ¥15 如何实现在renpy中创建并应用不同大小尺寸对话框?
  • ¥15 table表格有一列是固定列 滑动到最下面时 固定的那一列有几行没显示出来
  • ¥20 单细胞数据注释时报错
  • ¥20 dify工作流分析sql查询结果
  • ¥15 vscode编译ros找不到头文件,cmake.list文件出问题,如何解决?(语言-c++|操作系统-linux)
  • ¥15 通过AT指令控制esp8266发送信息
  • ¥15 有哪些AI工具提供可以通过代码上传EXCEL文件的API接口,并反馈分析结果
  • ¥15 二维装箱算法、矩形排列算法(相关搜索:二维装箱)
  • ¥20 nrf2401上电之后执行特定任务概率性一直处于最大重发状态