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

簡單解決Python文件中文編碼問題

 更新時間:2015年11月22日 16:58:04   投稿:hebedich  
這篇文章主要介紹了簡單解決Python文件中文編碼問題的相關(guān)資料,需要的朋友可以參考下

讀寫中文

需要讀取utf-8編碼的中文文件,先利用sublime text軟件將它改成無DOM的編碼,然后用以下代碼:

with codecs.open(note_path, 'r+','utf-8') as f:
line=f.readline()
print line

這樣就可以正確地讀出文件里面的中文字符了。

同樣的,如果要在創(chuàng)建的文件中寫入中文,最好也和上面差不多:

with codecs.open(st,'a+','utf-8') as book_note:
book_note.write(st)

創(chuàng)建中文文件

然后以讀出的字符為文件名,創(chuàng)建文件。

如果直接用上面讀出來的字符串創(chuàng)建文件,則會出現(xiàn):

st=digest_path+"\\"+onenote[0]+".txt"
print st
with open(st,'a+') as book_note:

經(jīng)過調(diào)試,應(yīng)該是最后一個換行符的問題,在生成名字的時候,將字符trip一下,就能夠得到文件:

st=digest_path+"\\"+onenote[0].strip()+".txt"

中文編碼問題是用中文的程序員經(jīng)常頭大的問題,在python下也是如此,那么應(yīng)該怎么理解和解決python的編碼問題呢?

我們要知道python內(nèi)部使用的是unicode編碼,而外部卻要面對千奇百怪的各種編碼,比如作為中國程序經(jīng)常要面對的gbk,gb2312,utf8等,那這些編碼是怎么轉(zhuǎn)換成內(nèi)部的unicode呢?

首先我們先看一下源代碼文件中使用字符串的情況。源代碼文件作為文本文件就必然是以某種編碼形式存儲代碼的,python默認會認為源代碼文件是asci編碼,比如說代碼中有一個變量賦值:

s1='a' 
print s1

python認為這個'a'就是一個asci編碼的字符。在僅僅使用英文字符的情況下一切正常,但是如果用了中文,比如:

s1='哈' 
print s1

這個代碼文件被執(zhí)行時就會出錯,就是編碼出了問題。python默認將代碼文件內(nèi)容當作asci編碼處理,但asci編碼中不存在中文,因此拋出異常。

解決問題之道就是要讓python知道文件中使用的是什么編碼形式,對于中文,可以用的常見編碼有utf-8,gbk和gb2312等。只需在代碼文件的最前端添加如下:

# -*- coding: utf-8 -*-

這就是告知python我這個文件里的文本是用utf-8編碼的,這樣,python就會依照utf-8的編碼形式解讀其中的字符,然后轉(zhuǎn)換成unicode編碼內(nèi)部處理使用。

不過,如果你在Windows控制臺下運行此代碼的話,雖然程序是執(zhí)行了,但屏幕上打印出的卻不是哈字。這是由于python編碼與控制臺編碼的不一致造成的。Windows下控制臺中的編碼使用的

是gbk,而在代碼中使用的utf-8,python按照utf-8編碼打印到gbk編碼的控制臺下自然就會不一致而不能打印出正確的漢字。

解決辦法一個是將源代碼的編碼也改成gbk,也就是代碼第一行改成:

# -*- coding: gbk -*-

另一種方法是保持源碼文件的utf-8不變,而是在'哈'前面加個u字,也就是:

s1=u'哈' 
print s1

這樣就可以正確打印出'哈'字了。

這里的這個u表示將后面跟的字符串以unicode格式存儲。python會根據(jù)代碼第一行標稱的utf-8編碼識別代碼中的漢字'哈',然后轉(zhuǎn)換成unicode對象。如果我們用type查看一下'哈'的數(shù)據(jù)類型type(‘哈'),會得到<type ‘str'>,而type(u'哈'),則會得到<type ‘unicode'>,也就是在字符前面加u就表明這是一個unicode對象,這個字會以unicode格式存在于內(nèi)存中,而如果不加u,表明這僅僅是一個使用某種編碼的字符串,編碼格式取決于python對源碼文件編碼的識別,這里就是utf-8。

Python在向控制臺輸出unicode對象的時候會自動根據(jù)輸出環(huán)境的編碼進行轉(zhuǎn)換,但如果輸出的不是unicode對象而是普通字符串,則會直接按照字符串的編碼輸出字符串,從而出現(xiàn)上面的現(xiàn)象。

使用unicode對象的話,除了這樣使用u標記,還可以使用unicode類以及字符串的encode和decode方法。

unicode類的構(gòu)造函數(shù)接受一個字符串參數(shù)和一個編碼參數(shù),將字符串封裝為一個unicode,比如在這里,由于我們用的是utf-8編碼,所以unicode中的編碼參數(shù)使用'utf-8′將字符封裝為

unicode對象,然后正確輸出到控制臺:

s1=unicode(‘哈', ‘utf-8′) 
print s1

另外,用decode函數(shù)也可以將一個普通字符串轉(zhuǎn)換為unicode對象。很多人都搞不明白python字符串的decode和encode函數(shù)都是什么意思。這里簡要說明一下。

decode是將普通字符串按照參數(shù)中的編碼格式進行解析,然后生成對應(yīng)的unicode對象,比如在這里我們代碼用的是utf-8,那么把一個字符串轉(zhuǎn)換為unicode就是如下形式:

s2='哈'.decode(‘utf-8′)

這時,s2就是一個存儲了'哈'字的unicode對象,其實就和unicode(‘哈', ‘utf-8′)以及u'哈'是相同的。

那么encode正好就是相反的功能,是將一個unicode對象轉(zhuǎn)換為參數(shù)中編碼格式的普通字符,比如下面代碼:

s3=unicode(‘哈', ‘utf-8′).encode(‘utf-8′)

s3現(xiàn)在又變回了utf-8的'哈'。

相關(guān)文章

  • Python實現(xiàn)基于KNN算法的筆跡識別功能詳解

    Python實現(xiàn)基于KNN算法的筆跡識別功能詳解

    這篇文章主要介紹了Python實現(xiàn)基于KNN算法的筆跡識別功能,結(jié)合實例形式詳細分析了使用KNN算法進行筆跡識別的相關(guān)庫引入、操作步驟與相關(guān)注意事項,需要的朋友可以參考下
    2018-07-07
  • Python 3.8正式發(fā)布重要新功能一覽

    Python 3.8正式發(fā)布重要新功能一覽

    最新版本的Python發(fā)布了!今年夏天,Python 3.8發(fā)布beta版本,但在2019年10月14日,第一個正式版本已準備就緒?,F(xiàn)在,我們都可以開始使用新功能并從最新改進中受益
    2019-10-10
  • 用python打印菱形的實操方法和代碼

    用python打印菱形的實操方法和代碼

    在本篇文章里小編給大家分享了關(guān)于用python打印菱形的實操方法和代碼,對此有需要的朋友們可以學(xué)習(xí)下。
    2019-06-06
  • Python?ChineseCalendar包主要類和方法詳解

    Python?ChineseCalendar包主要類和方法詳解

    ChineseCalendar?是一個?Python?包,用于獲取中國傳統(tǒng)日歷信息。這個包提供了中國農(nóng)歷、二十四節(jié)氣、傳統(tǒng)節(jié)日、黃歷等信息,這篇文章主要介紹了Python?ChineseCalendar包簡介,需要的朋友可以參考下
    2023-03-03
  • 對python中執(zhí)行DOS命令的3種方法總結(jié)

    對python中執(zhí)行DOS命令的3種方法總結(jié)

    今天小編就為大家分享一篇對python中執(zhí)行DOS命令的3種方法總結(jié),具有很好的參考價值,希望對大家有所幫助一起。一起跟隨小編過來看看吧
    2018-05-05
  • Python完成哈夫曼樹編碼過程及原理詳解

    Python完成哈夫曼樹編碼過程及原理詳解

    這篇文章主要介紹了Python完成哈夫曼樹編碼過程及原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-07-07
  • Python中的__repr__()方法小結(jié)

    Python中的__repr__()方法小結(jié)

    在 Python 中,__repr__()?是一個特殊方法,用于定義對象的字符串表示形式,本文主要介紹了Python中的__repr__()方法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Tensorflow訓(xùn)練模型默認占滿所有GPU的解決方案

    Tensorflow訓(xùn)練模型默認占滿所有GPU的解決方案

    這篇文章主要介紹了Tensorflow訓(xùn)練模型默認占滿所有GPU的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • Python通過kerberos安全認證操作kafka方式

    Python通過kerberos安全認證操作kafka方式

    這篇文章主要介紹了Python通過kerberos安全認證操作kafka方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python實現(xiàn)獲取視頻時長功能

    Python實現(xiàn)獲取視頻時長功能

    這篇文章主要介紹了Python如何實現(xiàn)獲取視頻時長功能,可以精確到毫秒。文中的示例代碼簡潔易懂,對我們的學(xué)習(xí)有一定的幫助,感興趣的可以了解一下
    2021-12-12

最新評論