鱼C论坛

 找回密码
 立即注册
查看: 1148|回复: 7

[已解决]python的编码判断_

[复制链接]
发表于 2021-9-15 09:56:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
python的编码判断_

我要打开一批txt文本来进行文本处理,

可是,这批文本的编码不统一,

有的是uft8 有的是gbk 可能有的还是gb2312,

这样,我要怎么去不出错的打开这些文本呢?
下面是我的测试代码,不太成功,有知道的指导一下谢谢
  1.   try:
  2.     text0.decode('utf8')
  3.   except Exception as e:
  4.     if "unexpected end of data" in str(e):
  5.       file = open(text, encoding='utf-8')
  6.     elif "invalid start byte" in str(e):
  7.         file = open(text, encoding='gb2312')
  8.     elif "ascii" in str(e):
  9.        file = open(text, encoding='Unicode')
复制代码


最佳答案
2021-9-16 10:49:03

用 charder 模块中的  detect 函数,读取文件二进制内容即可获取 txt 文本的编码格式

参考代码:

  1. import chardet

  2. file = open('Test.txt','rb')
  3. data = file.read()

  4. print(chardet.detect(data)['encoding'])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-15 22:11:42 | 显示全部楼层
chardet
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-16 10:49:03 | 显示全部楼层    本楼为最佳答案   

用 charder 模块中的  detect 函数,读取文件二进制内容即可获取 txt 文本的编码格式

参考代码:

  1. import chardet

  2. file = open('Test.txt','rb')
  3. data = file.read()

  4. print(chardet.detect(data)['encoding'])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-16 15:29:34 | 显示全部楼层
Twilight6 发表于 2021-9-16 10:49
用 charder 模块中的  detect 函数,读取文件二进制内容即可获取 txt 文本的编码格式

参考代码:

是的,我自己找到这个函数了,就是用这个,好用,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-17 16:56:00 | 显示全部楼层

nicodeDecodeError: 'gb2312' codec can't decode byte 0xdb in position 31777: illegal multibyte sequence 解码的时候会报这个错误 ,
用chardet也不能完美解决,
我现在想能不能这样,先用默认的方法读文本,如果 出错,就换编码,换成gb2312或者gbk,这个要怎么写出来,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-17 16:56:51 | 显示全部楼层
Twilight6 发表于 2021-9-16 10:49
用 charder 模块中的  detect 函数,读取文件二进制内容即可获取 txt 文本的编码格式

参考代码:

nicodeDecodeError: 'gb2312' codec can't decode byte 0xdb in position 31777: illegal multibyte sequence 解码的时候会报这个错误 ,
用chardet也不能完美解决,
我现在想能不能这样,先用默认的方法读文本,如果 出错,就换编码,换成gb2312或者gbk,这个要怎么写出来,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 17:12:41 | 显示全部楼层
swanseabrian 发表于 2021-9-17 16:56
nicodeDecodeError: 'gb2312' codec can't decode byte 0xdb in position 31777: illegal multibyte sequ ...


try-except 捕获报错就行了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-17 18:36:22 | 显示全部楼层
Twilight6 发表于 2021-9-17 17:12
try-except 捕获报错就行了吧
  1.   try:
  2.     text0.decode('utf8')
  3.   except Exception as e:
  4.     if "unexpected end of data" in str(e):
  5.       file = open(text, encoding='utf-8')
  6.     elif "invalid start byte" in str(e):
  7.         file = open(text, encoding='gb2312')
  8.     elif "ascii" in str(e):
  9.        file = open(text, encoding='Unicode')
复制代码


类似这种?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 09:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表