欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python自然語(yǔ)言編碼轉(zhuǎn)換模塊codecs介紹

 更新時(shí)間:2015年04月08日 11:21:41   投稿:junjie  
這篇文章主要介紹了python自然語(yǔ)言編碼轉(zhuǎn)換模塊codecs介紹,codecs專門(mén)用作編碼轉(zhuǎn)換,通過(guò)它的接口是可以擴(kuò)展到其他關(guān)于代碼方面的轉(zhuǎn)換,需要的朋友可以參考下

python對(duì)多國(guó)語(yǔ)言的處理是支持的很好的,它可以處理現(xiàn)在任意編碼的字符,這里深入的研究一下python對(duì)多種不同語(yǔ)言的處理。

有一點(diǎn)需要清楚的是,當(dāng)python要做編碼轉(zhuǎn)換的時(shí)候,會(huì)借助于內(nèi)部的編碼,轉(zhuǎn)換過(guò)程是這樣的:

復(fù)制代碼 代碼如下:

原有編碼 -> 內(nèi)部編碼 -> 目的編碼

python的內(nèi)部是使用unicode來(lái)處理的,但是unicode的使用需要考慮的是它的編碼格式有兩種,一是UCS-2,它一共有65536個(gè)碼位,另一種是UCS-4,它有2147483648g個(gè)碼位。對(duì)于這兩種格式,python都是支持的,這個(gè)是在編譯時(shí)通過(guò)--enable-unicode=ucs2或--enable-unicode=ucs4來(lái)指定的。那么我們自己默認(rèn)安裝的python有的什么編碼怎么來(lái)確定呢?有一個(gè)辦法,就是通過(guò)sys.maxunicode的值來(lái)判斷:
復(fù)制代碼 代碼如下:

import sys
print sys.maxunicode

如果輸出的值為65535,那么就是UCS-2,如果輸出是1114111就是UCS-4編碼。
我們要認(rèn)識(shí)到一點(diǎn):當(dāng)一個(gè)字符串轉(zhuǎn)換為內(nèi)部編碼后,它就不是str類(lèi)型了!它是unicode類(lèi)型:

復(fù)制代碼 代碼如下:

a = "風(fēng)卷殘?jiān)?
print type(a)
b = a.unicode(a, "gb2312")
print type(b)

輸出:
復(fù)制代碼 代碼如下:

<type 'str'>
<type 'unicode'>

這個(gè)時(shí)候b可以方便的任意轉(zhuǎn)換為其他編碼,比如轉(zhuǎn)換為utf-8:
復(fù)制代碼 代碼如下:

c = b.encode("utf-8")
print c

c輸出的東西看起來(lái)是亂碼,那就對(duì)了,因?yàn)槭莡tf-8的字符串。

好了,該說(shuō)說(shuō)codecs模塊了,它和我上面說(shuō)的概念是密切相關(guān)的。codecs專門(mén)用作編碼轉(zhuǎn)換,當(dāng)然,其實(shí)通過(guò)它的接口是可以擴(kuò)展到其他關(guān)于代碼方面的轉(zhuǎn)換的,這個(gè)東西這里不涉及。

復(fù)制代碼 代碼如下:

#-*- encoding: gb2312 -*-
import codecs, sys

print '-'*60
# 創(chuàng)建gb2312編碼器
look  = codecs.lookup("gb2312")
# 創(chuàng)建utf-8編碼器
look2 = codecs.lookup("utf-8")

a = "我愛(ài)北京天安門(mén)"

print len(a), a
# 把a(bǔ)編碼為內(nèi)部的unicode, 但為什么方法名為decode呢,我的理解是把gb2312的字符串解碼為unicode
b = look.decode(a)
# 返回的b[0]是數(shù)據(jù),b[1]是長(zhǎng)度,這個(gè)時(shí)候的類(lèi)型是unicode了
print b[1], b[0], type(b[0])
# 把內(nèi)部編碼的unicode轉(zhuǎn)換為gb2312編碼的字符串,encode方法會(huì)返回一個(gè)字符串類(lèi)型
b2 = look.encode(b[0])
# 發(fā)現(xiàn)不一樣的地方了吧?轉(zhuǎn)換回來(lái)之后,字符串長(zhǎng)度由14變?yōu)榱?! 現(xiàn)在的返回的長(zhǎng)度才是真正的字?jǐn)?shù),原來(lái)的是字節(jié)數(shù)
print b2[1], b2[0], type(b2[0])
# 雖然上面返回了字?jǐn)?shù),但并不意味著用len求b2[0]的長(zhǎng)度就是7了,仍然還是14,僅僅是codecs.encode會(huì)統(tǒng)計(jì)字?jǐn)?shù)
print len(b2[0])

上面的代碼就是codecs的使用,是最常見(jiàn)的用法。另外還有一個(gè)問(wèn)題就是,如果我們處理的文件里的字符編碼是其他類(lèi)型的呢?這個(gè)讀取進(jìn)行做處理也需要特殊的處理的。codecs也提供了方法.

復(fù)制代碼 代碼如下:

#-*- encoding: gb2312 -*-
import codecs, sys

# 用codecs提供的open方法來(lái)指定打開(kāi)的文件的語(yǔ)言編碼,它會(huì)在讀取的時(shí)候自動(dòng)轉(zhuǎn)換為內(nèi)部unicode
bfile = codecs.open("dddd.txt", 'r', "big5")
#bfile = open("dddd.txt", 'r')

ss = bfile.read()
bfile.close()
# 輸出,這個(gè)時(shí)候看到的就是轉(zhuǎn)換后的結(jié)果。如果使用語(yǔ)言內(nèi)建的open函數(shù)來(lái)打開(kāi)文件,這里看到的必定是亂碼
print ss, type(ss)


上面這個(gè)處理big5的,可以去找段big5編碼的文件試試。

相關(guān)文章

  • pyside+pyqt實(shí)現(xiàn)鼠標(biāo)右鍵菜單功能

    pyside+pyqt實(shí)現(xiàn)鼠標(biāo)右鍵菜單功能

    這篇文章主要為大家詳細(xì)介紹了pyside+pyqt實(shí)現(xiàn)鼠標(biāo)右鍵菜單功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • 基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例

    基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例

    這篇文章主要介紹了基于python實(shí)現(xiàn)藍(lán)牙通信代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • pytorch實(shí)現(xiàn)查看當(dāng)前學(xué)習(xí)率

    pytorch實(shí)現(xiàn)查看當(dāng)前學(xué)習(xí)率

    這篇文章主要介紹了pytorch實(shí)現(xiàn)查看當(dāng)前學(xué)習(xí)率,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python實(shí)現(xiàn)新浪博客備份的方法

    Python實(shí)現(xiàn)新浪博客備份的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)新浪博客備份的方法,涉及Python正則操作,字符串操作及文本操作的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • Python-OpenCV中的cv2.inpaint()函數(shù)的使用

    Python-OpenCV中的cv2.inpaint()函數(shù)的使用

    大多數(shù)人會(huì)在家里放一些舊的退化照片,上面有一些黑點(diǎn),一些筆畫(huà)等。你有沒(méi)有想過(guò)恢復(fù)它?本文就來(lái)介紹一下方法,感興趣的可以了解一下
    2021-06-06
  • python操作MySQL 模擬簡(jiǎn)單銀行轉(zhuǎn)賬操作

    python操作MySQL 模擬簡(jiǎn)單銀行轉(zhuǎn)賬操作

    這篇文章主要介紹了python操作MySQL 模擬簡(jiǎn)單銀行轉(zhuǎn)賬操作,需要的朋友可以參考下
    2017-09-09
  • Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單三層神經(jīng)網(wǎng)絡(luò)的搭建及測(cè)試 代碼解析

    Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單三層神經(jīng)網(wǎng)絡(luò)的搭建及測(cè)試 代碼解析

    一個(gè)完整的神經(jīng)網(wǎng)絡(luò)一般由三層構(gòu)成:輸入層,隱藏層(可以有多層)和輸出層。本文所構(gòu)建的神經(jīng)網(wǎng)絡(luò)隱藏層只有一層。一個(gè)神經(jīng)網(wǎng)絡(luò)主要由三部分構(gòu)成(代碼結(jié)構(gòu)上):初始化,訓(xùn)練,和預(yù)測(cè)。,需要的朋友可以參考下面文章內(nèi)容的具體內(nèi)容
    2021-09-09
  • python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn)

    python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn)

    在Python中,getattr和getattribute是用于動(dòng)態(tài)屬性訪問(wèn)和自定義屬性訪問(wèn)行為的重要工具,本文主要介紹了python的getattr和getattribute攔截內(nèi)置操作實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Tensorflow使用Anaconda、pycharm安裝記錄

    Tensorflow使用Anaconda、pycharm安裝記錄

    這篇文章主要介紹了Tensorflow使用Anaconda、pycharm安裝記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • python dlib人臉識(shí)別代碼實(shí)例

    python dlib人臉識(shí)別代碼實(shí)例

    這篇文章主要介紹了python dlib人臉識(shí)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論