當前位置:首頁 » 編程語言 » python中文unicode編碼

python中文unicode編碼

發布時間: 2022-11-26 13:47:39

『壹』 python 根據 漢字的 unicode 編碼(int類型)得到漢字字元

def decimal2hex(number):
return hex(number)[2:]

def hex2unicode(hex_number_string):
return '\\u' + hex_number_string

def unicode2chinese(unicode_number):
if isinstance(unicode_number, str):
return unicode_number.encode("latin-1").decode("unicode-escape")
elif isinstance(unicode_number, bytes):
return unicode_number.decode("unicode-escape")

if __name__ == "__main__":
number = 39532
hex_number_string = decimal2hex(number)
unicode_number = hex2unicode(hex_number_string)
chinese = unicode2chinese(unicode_number)
print(chinese)

『貳』 python語言支持中文嗎

python 支持unicode編碼,自定義標識符都可以用中文表示

『叄』 python是什麼編碼格式

python編碼總結:
1).首先python有兩種格式的字元串,str和unicode,其中unicode相當於位元組碼那樣,可以跨平台使用。
str轉化為unicode可以通過unicode(),u,str.decode三種方式
unicode轉化為str,如果有中文的話,一般通過encode的方式
2).如果代碼中有中文的話,我們一般會添加 "# coding=utf-8",這個是什麼作用呢,一般如下:
如果代碼中有中文注釋,就需要此聲明比較高級的編輯器(比如我的emacs),會根據頭部聲明,將此作為代碼文件的格式。程序會通過
頭部聲明,解碼初始化 u」人生苦短」,這樣的unicode對象,(所以頭部聲明和代碼的存儲格式要一致
所以,當我們填上編碼頭的時候,使用s="中文",實際上type(s)是一個str,是已經將unicode以utf-8格式編碼成str。
其次,如果我們在代碼中使用s=u'中文',相當於將str以utf-8解碼成unicode。
推薦學習《python教程》。

『肆』 python unicode編碼

python unicode編碼:

下面的代碼創建了一個Unicode字元串,用UTF-8編碼器將它編碼,然後寫入到一個文件中去,接著把數據從文件中讀回來,解碼成Unicode字元串對象,最後,列印出Unicode字元串,用以確認程序正確地運行。

linux中編寫,在VIM中輸入如下代碼,保存為uniFile.py

#/home/xiaopeng/python/code/uniFile.py
'''
:Writes
aUnicodestringtoafileinutf-8andreadsitbackin
'''
CODEC='utf-8'編碼方式
FILE='unicode.txt'要存的文件名
hello_out=u"Helloworld "創建了一個Unicode格式的字元串
bytes_out=hello_out.encode(CODEC)用UTF-8編碼
f=open(FILE,'w')
f.write(bytes_out)寫入指定文件中
f.close()
f=open(FILE,'r')
bytes_in=f.read()讀取
f.close()
hello_in=bytes_in.decode(CODEC)解碼
printhello_in列印

在終端中輸入:python uniFile.py

結果列印出 Hello world

然後在python目錄下會發現多了一個名為unicode.txt的文件,用cat命令查看一下,發現裡面的內容和列印的結果一樣.

把Unicode應用到實際中注意一下四點:

1程序中出現字元串時一定要加一個前綴u

2不要用str()函數,用Unicode()代替

3 不要用過時的string模塊。如果傳給它非ASCII碼,它會把一切搞砸。

4 不到必須時不要在你的程序里編解碼Unicode字元,只在你要寫入文件或者資料庫或者網路時,才調用encode()函數和decode()函數。

『伍』 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 編碼轉換與中文處理

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語言中的如何輸入編號叫什麼

Python 默認腳本文件都是 ANSCII 編碼的,當文件 中有非 ANSCII 編碼范圍內的字元的時候就要使用"編碼指示"來修正。 一個mole的定義中,如果.py文件中包含中文字元(嚴格的說是含有非anscii字元),則需要在第一行或第二行指定編碼聲明:

# -*- coding=utf-8 -*-或者 #coding=utf-8 其他的編碼如:gbk、gb2312也可以; 否則會出現類似:SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared; see http://www.pytho for details這樣的異常信息;n.org/peps/pep-0263.html

命令查看腳本默認的編碼方式
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>>

2.2 python中的編碼與解碼

先說一下python中的字元串類型,在python中有兩種字元串類型,分別是str和unicode,他們都是basestring的派生類;str類型是一個包含Characters represent (at least) 8-bit bytes的序列;unicode的每個unit是一個unicode obj;所以:

len(u'中國')的值是2;len('ab')的值也是2;

在str的文檔中有這樣的一句話:The string data type is also used to represent arrays of bytes, e.g., to hold data read from a file. 也就是說在讀取一個文件的內容,或者從網路上讀取到內容時,保持的對象為str類型;如果想把一個str轉換成特定編碼類型,需要把str轉為Unicode,然後從unicode轉為特定的編碼類型如:utf-8、gb2312等;

2.2.1 print 語句解釋編碼問題

print 是列印默認的編碼方式,相當於對任何對象encode編碼轉化成str對象。默認是gbk的編碼就是對Unicode進行自動的gbk編碼,再按照gbk編碼輸出。

當print語句碰到一個unicode目標的時候,會用當前python shell環境的默認編碼格式首先對unicode對象進行encode(此時unicode對象已經變成了一個str對象了),然後再以默認編碼格式為基礎,根據其包含的漢字和編碼的對應規則,把這個str對象解釋成中文並顯示出來。但是當print語句碰到的直接是個str目標的時候,就不管其從unicode轉到str時用的編碼格式是什麼,直接用默認編碼格式的對應規則來解釋成中文。所以,當unicode對象轉換成str時的編碼格式和print語句的默認編碼格式不一致的時候就會出現亂碼現象。比如在cmd的python shell裡面:

復制代碼
復制代碼
證明Python 系統默認編碼gbk
>>> s= '你好'
>>> s
'\xc4\xe3\xba\xc3'
>>> s = u'你好'
>>> s
u'\xc4\xe3\xba\xc3'
>>> s = '你好'
>>> s
'\xc4\xe3\xba\xc3'
>>> print type(s)
<type 'str'>
>>>unicode 編碼列印錯誤,print 解析字元串而不是Unicode 編碼
>>> s = u'你好'
>>> print s
ÄãºÃ
>>>uni = u'你好' #存入一個unicode對象
>>>print uni
你好 #可以正常顯示 相當於Unicode.encode(gbk)
>>>uni.encode("gbk")
'\xc4\xe3\xba\xc3' #顯示的是個str對象了,如果type(uni.encode("gbk"))得到的就是str對象
>>>print uni.encode("gbk")
你好 #可以正常顯示,因為在cmd下的pythonshell里默認個編碼格式就是gbk,gbk解析
>>>uni.encode("utf-8")
'\xe4\xbd\xa0\xe5\xa5\xbd' #可以看到,encode用的編碼格式不同,編成的字元串也是不同的
>>>print uni.encode("utf-8")
浣犲ソ #亂碼,因為用了gbk中漢字和字元串編碼格式對應規則去解釋了用utf-8編碼成的字元串。解釋的編碼格式不對應。
#######さらに######
>>>print '\xc4\xe3' #自己寫出來的這么個字元串(前面不加r)的話也會被print解釋成中文,按照編碼格式輸出

>>>print uni.encode("utf-8").decode("gbk")
浣犲ソ
'''
亂碼,而且和上面的亂碼一樣,這是因為,在uni被utf-8 encode之後,這個對象變成了str對象,是'\xe4\xbd\xa0\xe5\xa5\xbd' 這個。
後來,它又被按照gbk的規則解碼,又變回了unicode,但是此時它在內存里的二進制數據已經和最初的uni不一樣了。
最初的uni,應該是'\xc4\xe3\xba\xc3'.decode("gbk"),而現在的這個東西,他decode之前的字元串已經變過了。
這么一個東西再拿去print,又把它編碼成了gbk格式,相當於前面那步decode沒有做,變回了'\xe4\xbd\xa0\xe5\xa5\xbd'。
再解釋成漢字,當然就和最開始用uni編碼成utf-8格式再解釋成漢字的亂碼一樣了
'''

復制代碼

2.2.2 腳本print 列印的正確方式

上面已經證明了系統的默認編碼方式是gbk,就是print 最後正確的編碼方式應該是gbk

兩種解決編碼不匹配的情況:

一是明確的指示出 s 的編碼方式
# -*- coding: utf-8 -*-
s = '中文'
s.decode('utf-8').encode('gb2312')
二是更改 sys.defaultencoding 為文件的編碼方式
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys) # Python2.5 初始化後會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')

三、實踐經驗中爬取數據的獲得

復制代碼
# -*- coding: utf-8 -*-
'''
#加油兩個字可以很好的比較編碼正確和錯誤
#### 錯誤的處理方式,
s = "中文"
print s
#這里print就不是輸出gbk的編碼,是按照頭文件utf-8的格式輸出
# 結果:中文
print s.decode('utf-8')
#結果中文,s進行解碼稱為Unicode,print列印就和系統print列印一樣自動將Unicode進行
#解碼,不用encode編碼也能輸出,但是最好轉化成為字元串輸出。
上面實例就是錯誤使用編碼,錯誤使用編碼會出現個別字體的亂碼。
'''

'''
要點1、聲明頭文件# -*- coding: utf-8 -*- 說明所有的代碼和中文是utf-8的編碼方式
要點2、print輸出函數輸出到前台cmd中的默認系統編碼方式是GBK,
要點3、盡量將Unicode轉化成為字元串str (gbk或者utf-8),再去處理。

#unicode 轉化成為字元串
s = u'加油'
print s
#結果:加油。原因:系統自動將Unicode升級gbk編碼成為字元串,然後系統print 列印gbk
print s.encode('utf-8')
#結果:鍔犳補。錯誤原因:Unicode 編碼成為utf-8的字元串形式,但是print列印系統是gbk的,編碼沖突。
print s.encode('gbk')
#結果:加油。原因:和print s等價,認為編碼了gbk,系統列印
ss = "加油"
print ss
#結果:鍔犳補。原因:ss為utf-8的字元串str,print 列印的對應編碼字元串是gbk的,所以編碼沖突。
print ss.decode('utf-8').encode('gbk')
#結果:加油。原因:ss首先從字元串編碼utf-8解碼成為unicode,然後進行編碼gbk,等價使用print ss.decode('utf-8')。
'''

'''
3.1python中關於中文轉換url編碼的問題
爬蟲的時候我們經常會碰到中文鏈接編碼出現變換的問題,
例如'麗江'中文在url的地址編碼卻是'%E4%B8%BD%E6%B1%9F',
因此需 要做一個轉換。這里我們就用到了模塊urllib。
'''
import urllib
data = '麗江'
print data.decode('utf-8').encode('gbk')
#對utf-8的中文編碼
print urllib.quote(data)
#那我們想轉回去呢?
print urllib.unquote('%E4%B8%BD%E6%B1%9F').decode('utf-8').encode('gbk')

'''
'麗江'在網頁編碼是gbk的轉換碼是'%C0%F6%BD%AD',utf-8中的轉化碼是'%E4%B8%BD%E6%B1%9F',其實是編碼問題。
網路的是gbk,其他的一般網站比如google就是utf8的。所以可以用下列語句實現。
'''

#江蘇課題的編碼轉化
import sys,urllib
s = '江蘇'
print urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
print urllib.quote(s.decode(sys.stdin.encoding).encode('utf8'))

for place in ['南京','無錫','徐州','常州','蘇州','鹽城','南通','連雲港','淮安','鹽城','揚州']:
print urllib.quote(place)

####################
#結果:
'''
>>>
麗江
%E4%B8%BD%E6%B1%9F
麗江
%E4%B8%BD%E6%B1%9F
%E6%B6%93%E8%8A%A5%E7%9D%99
>>>
'''

『捌』 Python2.7 中文字元編碼,使用Unicode時,選擇什麼編碼格式

關於編碼和亂碼的問題,我簡單講一下。

通常問這類問題的人是混淆了若干個不同的概念,並且他們自己也沒有意識到自己混淆了這些概念的。

  • 終端顯示字元的編碼(windows下終端是cmd,linux下是各種terminal,遠程登錄是putty或者xshell)

  • shell環境的編碼。比如中文版windows用的是gbk(向下兼容gb2312),大多數linux發行版使用的是utf-8(LANG=zh_CN.UTF-8)。

  • 文本文件的編碼。這個通常取決於你的編輯器,而且有的編輯器支持多種編碼的話,你可以在文本開頭位置指定編輯器使用特定編碼。比如# -*- coding: utf8 -*-,vim看到這行會默認將這個腳本認定為utf-8兼容編碼格式。

  • 應用程序的內部編碼。一個字元串,作為數據只是一個位元組數組,但是作為字元的數組,就有一個解析方式。java和python的內部字元編碼是utf-16,python和java都支持用不同的編碼來對位元組數組進行decode來得到字元數組。


  • 拿題主的問題來解釋一下。

    我在ubuntu kylin中文環境下默認terminal中做了同樣的實驗,但是結果和題主恰好相反:


    這個實際上是gbk(兼容gb2312)的字元「漢字」的真實位元組數組。這個實際上是gbk(兼容gb2312)的字元「漢字」的真實位元組數組。
    所以對這坨數據做unicode("漢字","utf8")會失敗——因為不管你怎麼想,雖然看上去是一樣,但是實際上不是同一坨東西啊!

  • 題主現在弄了一個文件,在開始加上了
    # -*- coding: utf8 -*-
    這下編輯器看到了,知道這文件是utf-8的了。所以編輯器對讀入的一坨坨位元組用utf-8來解碼,對於輸出到磁碟的漢字也用utf-8來編碼。所以你在文件裡面看到的看上去像「漢字」的東西,就和第一種情況下想同了,當然代碼就跑得通。
    順便說一下,如果編輯器無視行首這行編碼聲明,或者編輯器無法支持utf-8格式,那麼你弄好的文件在那個編輯器下就會顯示亂碼,多麼簡單的道理啊。


  • 所以,要能夠正常的顯示中文(或者其他什麼亂七八糟奇葩的多位元組文字),以下條件缺一不可:

  • 終端和環境的編碼一致(本機通常是一致的,不一致常常出現在遠程登錄);如果不一致就需要有編輯器或者文本閱讀器做一個兼容兩者的轉換。

  • 編輯器能夠認識文本編碼

  • 系統擁有能顯示這種字元的字體。


  • 這也就是我為什麼一直反對在程序文本中使用除ascii之外的所有編碼字元的原因。環境太復雜了,繞開問題遠比解決問題輕松。

『玖』 python遇到『\u』開頭的unicode編碼

web信息中常會遇到「\u4f60\u597d」類型的字元。首先』\u『開頭就基本表明是跟unicode編碼相關的,「\u」後的16進制字元串是相應漢字的utf-16編碼。python里decode()和encode()為我們提供了解碼和編碼的方法。其中decode('unicode_escape')能將此種字元串解碼為unicode字元串。

比如:

有篇講python編碼的文章比較好, http://blog.csdn.net/liuxincumt/article/details/8183391

『拾』 Python中怎麼定義中文編碼

在程序的第一行指定中文編碼方式,並且輸入字元為unicode,然後編碼成gb18030方式,完整程序如下:
-------------------------------------
# -*- coding: gb18030 -*-
#!/usr/bin/python

cont = raw_input( u"請輸入:".encode("gb18030") )

print cont
-------------------------------------
輸入的內容也可以是中文

熱點內容
優酷上傳視頻需要多久 發布:2024-04-25 18:33:05 瀏覽:674
inf12編譯器 發布:2024-04-25 18:15:39 瀏覽:98
撲克總督3安卓哪裡下載 發布:2024-04-25 18:10:02 瀏覽:394
什麼網站是php 發布:2024-04-25 18:03:42 瀏覽:220
java教程免費下載 發布:2024-04-25 18:02:01 瀏覽:442
i西安編程 發布:2024-04-25 16:55:35 瀏覽:263
核磁看壓縮 發布:2024-04-25 16:37:22 瀏覽:432
訪問不上光貓 發布:2024-04-25 16:13:44 瀏覽:319
部隊電腦配置有哪些 發布:2024-04-25 16:13:43 瀏覽:970
霍曼密碼鎖什麼價位 發布:2024-04-25 16:08:01 瀏覽:750