『壹』 python的UTF-8問題
編碼問題需要注意:
你的py文件是utf8編碼的
在py文件開始的第一行加上 # -*- coding:utf-8 -*-
處理中文時,如果是自定義存儲中文的變數,最好用 a = u'xx'形式
如果是其他來源,先decode('來源是什麼編碼'),再encode('utf-8')
『貳』 Python處理不同編碼utf8和gbk的問題
有。
使用chardet庫。它會去猜測文本文件的編碼,並返回形如:
編碼類型:utf-8
置信度:0.9
這樣的結果,也就是說chardet斷定該文件有90%的可能性是utf-8編碼的。
不過chardet的缺陷就是,它不能完全100%確定文件的編碼類型。
目前我的做法是,如果置信度超過0.95,那麼就認定chardet的判斷結果是正確的。否則,再加上一些人機交互操作進行判斷。
目前,chardet庫官網提供的版本只適用於Python 2,如果您使用的是Python 3.x,我可以另外上傳一個。
『叄』 python pandas 過濾某列特殊字元求助
漢字也被替換掉了:utf-8
import numpy as np
import pandas as pd
import re
df=pd。
#coding;cidnum'.keyword = df,';)
發現結果把所有的非數字及字母全部替換掉了;;keyword')
df;/, '.str,';'[^a-zA-Z0-9_\]
#將雙引號過濾掉
#將NA的替換掉g
df=df.keyword = df;;path'
df,'name'home/.keyword, '.replace(r;0'file_20150625'.fillna(')
r=u',header=None;cid'.str.lower()
i = 0
df, sep='.keyword,字母意外的所有特殊符號,數字;;u9fa5]'u4e00-\t'想過濾掉除文字。原因是什麼啊.read_csv('.columns=[',具體解決方案如下:
解決方案1:
改成r="\W"試試
解決方案2:
=u'u4e00-\[^a-zA-Z0-9_\u9fa5]'
解決方案3:
你自己先要確定「亂碼」的定義,例如韓文(unicode),如果你裝了韓文字體,那是可以顯示的,不是亂碼,但沒裝的話就是問號一堆,如果是韓文
(euc-kr),在漢字系統那隻是一堆無語義的漢字……可能這個舉例扯遠了,你覺得不會有這種情況,但我只是提醒一下會有意料之外的情況
所以,你需要一個白名單,把你允許的字元unicode范圍都列出來,因為肯定不止漢字,像你列出的文件名中就有空格
另外,沒必要逐個字元檢查,直接用re.sub去除白名單外的字元就可以了
『肆』 如何設置python的編碼格式為utf-8
重裝了系統(ubuntu 14.04)原來正常可用的OpenERP項目在切換到開發者模式的時候報錯:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
而在伺服器上的項目正常可用,其原因是由於python的默認編碼設置為ascii,可以用以下命令查看:
import sys
sys.getdefaultencoding()
解決方案有兩種:
1. 在項目啟動文件中添加設置字元為utf8:
import sys
reload(sys)
sys.setdefaultencoding('utf8')
2. 在python的lib文件夾下的sitecustomize.py文件中添加代碼:(我的文件位於/usr/lib/python2.7)
import sys
reload(sys)
sys.setdefaultencoding('utf8')
try:
import apport_python_hook
except ImportError:
pass
else:
apport_python_hook.install()
relaod(sys)一句是必須的
『伍』 怎麼在Python里使用UTF-8編碼
一個完整的開頭應該是這個樣子的:
#!
usr/bin/python
#coding=utf-8
//這句是使用utf8編碼方式方法,
可以單獨加入python頭使用。
#
-*-
coding:cp936
-*-
import
sys
reload(sys)
sys.setdefaultencoding('utf-8')
sys.path.append("../pythonLib/")
import
os,
string
import
json
import
time
from
time
import
*
希望可以幫到你。
『陸』 python 判斷一個字元能否用gbk和utf8編碼
使用chardet庫。它會去猜測文本文件的編碼,並返回形如:
編碼類型:utf-8
置信度:0.9
這樣的結果,也就是說chardet斷定該文件有90%的可能性是utf-8編碼的。
不過chardet的缺陷就是,它不能完全100%確定文件的編碼類型。
目前我的做法是,如果置信度超過0.95,那麼就認定chardet的判斷結果是正確的。否則,再加上一些人機交互操作進行判斷。
目前,chardet庫官網提供的版本只適用於Python 2,如果您使用的是Python 3.x,我可以另外上傳一個。
『柒』 用Python 抓取的UTF8網頁無法decode('utf-8')
估計就是個別字元有問題,即
本來標稱utf-8,但是實際上個別字元不是utf-8,比如是gb2312
結果導致錯誤。
常見的解決辦法是,添加ignore參數,比如:
decodedUnicodeHtml = yourHtml.decode("UTF-8", 'ignore')
就可以正常解碼了。
更多相關內容可參考:
【總結】Python 2.x中常見字元編碼和解碼方面的錯誤及其解決辦法
(此處沒法發布地址,請自己google搜帖子標題,即可找到帖子地址)
『捌』 python讀取文件解決『utf8』 codec can』t decode byte 0xa1的問題
一般這種文件存在類似字元:
如果UTF-8搞不定,可以採取ISO-8859-1編碼方式解決:
最早的編碼是iso8859-1,和ascii編碼相似。但為了方便表示各種各樣的語言,逐漸出現了很多標准編碼,重要的有如下幾個。
很明顯,iso8859-1編碼表示的字元范圍很窄,無法表示中文字元。但是,由於是單位元組編碼,和計算機最基礎的表示單位一致,所以很多時候,仍舊使用iso8859-1編碼來表示。而且在很多協議上,默認使用該編碼。比如,雖然"中文"兩個字不存在iso8859-1編碼,以gb2312編碼為例,應該是"d6d0 cec4"兩個字元,使用iso8859-1編碼的時候則將它拆開為4個位元組來表示:"d6 d0 ce c4"(事實上,在進行存儲的時候,也是以位元組為單位處理的)。而如果是UTF編碼,則是6個位元組"e4 b8 ad e6 96 87"。很明顯,這種表示方法還需要以另一種編碼為基礎。
需要說明的是,定長編碼便於計算機處理(注意GB2312/GBK不是定長編碼),而unicode又可以用來表示所有字元,所以在很多軟體內部是使用unicode編碼來處理的,比如java。
注意,雖然說utf是為了使用更少的空間而使用的,但那隻是相對於unicode編碼來說,如果已經知道是漢字,則使用GB2312/GBK無疑是最節省的。不過另一方面,值得說明的是,雖然utf編碼對漢字使用3個位元組,但即使對於漢字網頁,utf編碼也會比unicode編碼節省,因為網頁中包含了很多的英文字元。