python轉GB2312
Ⅰ 怎樣優雅解決 python 解析 xml gb2312 編碼的問題
解決辦法:
由於xml協會規定,所有xml解析器均需要支持utf-8和utf-16兩種編碼而不要求別的編碼,所以我估計python提供的xml處理模塊就是不支持gb2312的。而windows下的文件,大部分均為gb2312編碼的,因此處理的時候,就會帶來不方便的地方。
解1:利用UltraEdit等工具,將xml文件轉換成UTF-8的,然後encoding="utf-8"即可
Ⅱ python編碼轉換:ascii和GB2312的問題
供參考。gb312本來就是標准ascii的一種擴充,ascii可以視同為gb312的子集。所以,如果var的值全部是在ascii裡面的話,轉成gb312後也還是屬於ascii,所以使用detect函數的時候,編碼還是ascii(當然同時也屬於gb312);如果var的值不是全部在ascii裡面的話,語句var = var.decode('ascii')可能會出錯。
只要var的值是英文(內碼0-127),轉換不轉換,都已經是gb2312編碼。
Ⅲ 怎樣優雅解決 python 解析 xml gb2312 編碼的問題
你以二進制形式讀入XML文件,讀入到bytes類型對象中,然後bytes.decode傳編碼參數就能指定二進制數據的編碼、轉換為python內部使用的utf-8。
bytes.decode(encoding="gb2312")
Ⅳ python gb2312編碼問題
使用python進行gb2312編碼,遇到如下問題
其中編碼錯誤的漢字是: 別克
經過閱讀這篇文章 GBK與GB2312的些許不同 使用gbk進行編碼,問題就解決。
再次遇到問題:
這次編碼錯誤的字是:g l 8
Ⅳ Python 編碼轉換與中文處理
python 中的 unicode 是讓人很困惑、比較難以理解的問題. 這篇文章 寫的比較好, utf-8是 unicode的一種實現方式,unicode、gbk、gb2312是編碼字元集.
Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用" 編碼指示 "來修正一個 mole 的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明: # -*- coding=utf-8 -*- 或者 #coding=utf-8
其他的編碼如:gbk、gb2312也可以;否則會出現:
先說一下python中的字元串類型,在python中有兩種字元串類型,分別是 str 和 unicode ,他們都是basestring的派生類;
在str的文檔中有這樣的一句話:
也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等。
unicode 轉為 gb2312,utf-8等,使用 encode(encoding)
utf-8,GBK轉換為 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)
普通的 str 轉為 unicode,
如果直接執行s.encode('gb2312')會發生什麼?
這里會發生一個異常:Python 會自動的先將 s 解碼為 unicode ,然後再編碼成 gb2312。因為解碼是python自動進行的,我們沒有指明解碼方式,python 就會使用 sys.defaultencoding 指明的方式來解碼。很多情況下 sys.defaultencoding 是 ANSCII,如果 s 不是這個類型就會出錯。
拿上面的情況來說,我的 sys.defaultencoding 是 anscii,而 s 的編碼方式和文件的編碼方式一致,是 utf8 的,所以出錯了:
對於這種情況,我們有兩種方法來改正錯誤:
s = '中文'
s.decode('utf-8').encode('gb2312') ```
import sys
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')
print open("Test.txt").read()
import codecs
print open("Test.txt").read().decode("utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'ufeff' in position 0: illegal multibyte sequence
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")
s = "中文"
print unicode(s, "utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in <mole>
s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
s = "中文"
print unicode(s, "gbk")
s = "中文"
print unicode(s, "cp936")
Ⅵ python有哪幾種編碼方式
第一種:ASCII碼。是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言,它是現今最通用的單位元組編碼系統,並等同於國際標准IS/IEC
646。
由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機李,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母a的編碼是97,後128個稱為擴展ASCII碼。
第二種:GBK和GB2312。能在計算機中顯示中文字元是至關重要的,然而ASCII表裡一個偏旁部首都沒有,所以我們需要一個關於中文和數字對應的關系表,一個位元組只能最多表示256個字元,用處理中文顯然一個位元組是不夠的,所以我們需要採用兩個位元組來表示,所以中國制定了GB2312編碼,用來將中文編寫進去。
第三種:Unicode。因為各個國家都有一套自己的編碼,所以無法避免沖突,因此Unicode誕生了。它可以把所有語言都統一到一套編碼里,這樣就不會存在亂碼問題了,現代操作系統和大多數編程語言都直接支持Unicode。
第四種:UFT-8。基於節約的原則,出現了把Unicode編碼轉化為可變長編碼的UTF-8編碼。而UTF-8編碼把一個Unicode字元根據不同的數字大小編碼成1-6個位元組,常用的英文字母被編碼成一個位元組,漢字通常是3個位元組,只有很生僻的字元才會被編碼成4-6個位元組,如果你要傳輸的文本包含大量英文字元,用UTF-8編碼就能節省空間。
Ⅶ 怎樣優雅解決 python 解析 xml gb2312 編碼的問題
優雅不好說,盡量找到一個簡單可以重用的辦法就可以了。
XML通常都強制要求用UTF-8格式的,如果它是GB18030或者是 GB2312格式,你轉換一下就可以了。
當然你可以檢測一下它的編碼。 如果你沒有安裝這樣的模塊,就自己做一個,利用python的編碼轉換異常,自己做一個自動編碼檢測。然後反復重用。基本上都是正確的。
在python世界裡,盡量遠離GB2312。這是通常的規矩。全部的UTF-8,不管是源代碼還是配置文件。 到了python3,內部編碼是unicode,外部是utf-8
別給自己找麻煩。
Ⅷ python 將漢字 輸出GB2312
我用的python3.5 用ascii函數處理
s="中文"
lst=[]
forcins:
lst.append(int('0x'+ascii(c)[3:7],16))
print(lst)
輸出是:[20013, 25991]
Ⅸ python字元編碼轉換
decode的作用是將其他編碼的字元串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字元串轉換成unicode編碼。
encode的作用是將unicode編碼轉換成其他編碼的字元串,如str2.encode('gb2312'),表示將unicode編碼的字元串轉換成gb2312編碼。