import chardet
sys.setdefaultencoding('utf-8')
strs=" should buy\x85 appleyuchi \x85 I decide to try this one. "
# fencoding=chardet.detect(strs)
# print fencoding
import re
p=re.compile(r'[^\x00-\x7f]')
m=re.sub(p,'',strs)
print m
第二种办法是
#-*- encoding:utf-8 -*-
import sys
reload(sys)
import chardet
sys.setdefaultencoding('utf-8')
strs=" should buy\x85 appleyuchi \x85 I decide to try this one. "
fencoding=chardet.detect(strs)
print fencoding
print strs.decode('windows-1252')
运行结果:
{'confidence': 0.73, 'language': '', 'encoding': 'Windows-1252'}
should buy… appleyuchi … I decide to try this one.
也就是先判断strs是什么类型的编码,然后根据该编码名字进行解码
第三种办法:
定位到错误后,在python交互模式下:
>>> ord('\x85')
133
因为unicode是兼容ASCII的,但是ord值大于127,所以\x85既不是ASCII也不属于unicode,只能是其他编码,判断之后,转到第一种处理或者第二种办法处理。
记录网友的话:用java爬取数据,即使代码中设定编码为utf-8,但是如果数据本身是非utf-8,那么即使代码设定为utf-8,也是无法对非utf-8的数据进行解码的,此时只能手动解码。decode('windows-1252')
字符集可以在下面查看(需要翻墙),在右上角输入\x85,回车后就可以查到在不通的语言中对应的字符
http://www.charbase.com/0085-unicode-next-line-nel
‘’我‘’这个汉字不是一个char。是utf编码后到字符串
字符,字符串是两个不同的东西
unicode做的就是用多个字符表示一个对应的关系
>>> print('我'.encode())
b'\xe6\x88\x91'
for i in str('我'.encode()): print(ord(i))
每一位ascii(也就是\xe6,\x88\,x91)都是在128以下的
第一种办法是使用正则直接删除非utf-8的字符\x85,以下是请网友帮助写的#-*- encoding:utf-8 -*-import sysreload(sys)import chardetsys.setdefaultencoding('utf-8')strs=" should buy\x85 appleyuchi \x85 I decide to try this one. " ...
最近做一个关于正则匹配的项目,用open()打开
UTF-8
格式的文件,读取每一行的内容;由于一些文件中存在
非
UTF-8
标准的
字符
,脚本执行会报错。在debug过程中发现,实际上不论你写的是read(1)(读取一个字节的内容)还是readline()(读取一行的内容),
python
库函数会一次性读取一大块内容,一旦这块数据中有
非
法字节,整个调用就会出错。
例如以下代码读取每一行内容并打印,实际上含有...
在处理文档相关项目中,经常会碰到
utf8
的
非
法
字符
,例如用户上传一个文件,系统根据用户文件产生相应结果返回。如果用户文件(utf
编码
的csv文件)中有
utf8
的
非
法
字符
,需要程序能自动去掉这些
字符
,因为这些
字符
也是无意义的。
错误信息:
处理方法:
有时候一个文件中的
文本
会用gbk、
utf-8
去解码,获取其中的内容,但是有些
utf-8
能表示的
字符
,gbk无法表示,所以这里先把gbk不能表示的
字符
去除
,再将
文本
解码成
utf-8
后存储为
utf-8
字符
集格式。
原理就是利用了encode函数的errors选项,设置errors=‘ignore’,略过错误
字符
content=u'\uf0b7\ufeff\uf052\uf0a3汉字'
print(content)
print(content.encode('
utf-8
'))
print(content.
def find_chinese(file):
pattern = re.compile(r'[^\u4e00-\u9fa5]')
chinese = re.sub(pattern, '', file)
print(chinese)
def find_unchinese(file):
pattern = re.compil...
当我们用
Python
来处理有乱码的文件时,经常会遇到
编码
错误,有时候不得不加一个errors = 'ignore'参数来忽略错误,今天分享一下如何用
Python
来
删除
这些乱码,得到一个干净的文件。
先说下思路:用二进制方式打开文件,这样就不会出现
编码
问题,然后读取每一个字节,只要这个字节不在我们使用
编码
的范围内,就把它踢掉,然后保存剩下的字节,我们得到的就是一个干净的文件。
比如说这样 ascii
编码
的文件,它含有乱码:
处理之后是这样的:
代码是这样写的:
import...