python2.7删除所有非utf-8编码的字符串
第一種辦法是使用正則直接刪除非utf-8的字符\x85,以下是請網友幫助寫的
#-*- 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
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以下的?
總結
以上是生活随笔為你收集整理的python2.7删除所有非utf-8编码的字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nltk英文词性标注
- 下一篇: ubuntu linux下使用vscod