龙云宇 发表于 2020-9-13 13:41:47

python读取含有汉字文本报错

name1 = input('请输入需要比较的头文件:')
name2 = input('请输入需要比较的另一个文件:')

name1_ = ('E:\\' + name1 + '.txt')
name2_ = ('E:\\' + name2 + '.txt')

file_name1 = open(name1_ , 'r')
file_name2 = open(name2_ , 'r')

count = 0
number = 0
jas = []

for each_line1 in file_name1:
    number += 1

    for each_line2 in file_name2:
      
      if each_line1 != each_line2:
            count += 1
            jas.append(number)
            break
      else:
            break
   
file_name1.close()
file_name2.close()
print('两个文件共有【%d】处不一样:' % (count))
if count != 0:
    for i in jas:
      print('第%d行不一样' % (i))




第一个文本还能读取,但不能正确读取,第二个文本读取不了,会报解码错误,求解答{:5_111:}

sunrise085 发表于 2020-9-13 13:45:20

第一个文本还能读取,但不能正确读取
什么叫不能正确读取?应该也是解码问题吧
第二个文本读取不了,会报解码错误
解码错误,那你就换一种解码方式呗,在open中添加上解码方式参数,txt文件常见的编码方式有 'utf-8' 和 'GBK' ,解码参数写法:file_name1 = open(name1_ , 'r',encoding='utf-8')

ba21 发表于 2020-9-13 13:53:03

编码问题。
比如:就算是你在windows下 直接用记事本输入 联通 保存,然后再打开都会是乱码。

最佳处理方式
使用cchardet判断字符编码(准确度高)
cchardet 比chardet准确度高,速度快。

检测文件编码
import cchardet as chardet

# 先检测出文件编码
with open("test.txt", "rb") as f:
    msg = f.read()

enc = chardet.detect(msg) # 返回的是个字典 编码和准确度。如:{'encoding': 'UTF-8', 'confidence': 0.9900000095367432}
print(enc)
enc = enc['encoding']

# 然后以指定编码打开文件
with open("test.txt", "r", encoding=enc) as f:
    print(f.read())

网页编码判断
import requests
import cchardet

res = requests.get('http://www.baidu.com/')
rawdata= res.content
enc = cchardet.detect(rawdata)
enc = enc['encoding']
print(enc)
页: [1]
查看完整版本: python读取含有汉字文本报错