找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3670|回复: 0

[求助] 求助python3 编码问题

2

主题

2

帖子

2

积分

贫民

积分
2
fengzihh 发表于 2020-5-24 21:16:27 | 显示全部楼层 |阅读模式
请大牛帮忙!我有一些文本,里面有些字的编码很奇怪,导致我无法正确分词,所以我想能不能都统一编码。我摘取了其中一句,如下:

import chardet
l="2020年2⽉10⽇,医⽣步⾏回家近30分钟。"
for c in l:
    print(c,chardet.detect(c.encode('utf-8')))



结果是
2 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
0 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
2 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
0 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
年 {'encoding': 'ISO-8859-1', 'confidence': 0.73, 'language': ''}  
2 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
⽉ {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
1 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
0 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
⽇ {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
, {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
医 {'encoding': 'utf-8', 'confidence': 0.505, 'language': ''}      
⽣ {'encoding': 'ISO-8859-1', 'confidence': 0.73, 'language': ''}
步 {'encoding': 'ISO-8859-1', 'confidence': 0.73, 'language': ''}
⾏ {'encoding': 'utf-8', 'confidence': 0.505, 'language': ''}
回 {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
家 {'encoding': 'ISO-8859-1', 'confidence': 0.73, 'language': ''}
近 {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
3 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
0 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
分 {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
钟 {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}
。 {'encoding': 'Windows-1252', 'confidence': 0.73, 'language': ''}


首先想请问,为什么我拿utf8对这句话编码,这些字的encoding还有其他类型?ISO-8859-1?Windows-1252?
于是我从网上找的办法,尝试把ISO-8859-1编码换成utf8,如下
import chardet
l="2020年2⽉10⽇,医⽣步⾏回家近30分钟。"
for c in l:   
    print(c,chardet.detect(c.encode('utf-8')))
    if chardet.detect(c.encode('utf-8'))['encoding'] == 'ISO-8859-1':
        c=c.encode("iso-8859-1").decode('gbk').encode('utf8')
        print(c,chardet.detect(c)['encoding'])



结果报错:
2 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
0 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
2 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
0 {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
年 {'encoding': 'ISO-8859-1', 'confidence': 0.73, 'language': ''}
Traceback (most recent call last):
  File "f:/Onedrive/论文项目/大健康/新冠-香港/test.py", line 6, in <module>
    c=c.encode("iso-8859-1").decode('gbk').encode('utf8')
UnicodeEncodeError: 'latin-1' codec can't encode character '\u5e74' in position 0: ordinal not in range(256)



我该怎么处理呢?
回复

使用道具 举报

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

本版积分规则

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