日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python中使用中文

發布時間:2025/3/15 python 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中使用中文 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


python的中文問題一直是困擾新手的頭疼問題,這篇文章將給你詳細地講解一下這方面的知識。當然,幾乎可以確定的是,在將來的版本中,python會徹底解決此問題,不用我們這么麻煩了。

先來看看python的版本:
>>> import sys
>>> sys.version
'2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)]'

(一)
用記事本創建一個文件ChineseTest.py,默認ANSI:
s = "中文"
print s

測試一下瞧瞧:
E:/Project/Python/Test>python ChineseTest.py
? File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xd6' in file ChineseTest.py on line 1, but no encoding declared;

偷偷地把文件編碼改成UTF-8:
E:/Project/Python/Test>python ChineseTest.py
? File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared;

無濟于事。。。
既然它提供了網址,那就看看吧。簡單地瀏覽一下,終于知道如果文件里有非ASCII字符,需要在第一行或第二行指定編碼聲明。把ChineseTest.py文件的編碼重新改為ANSI,并加上編碼聲明:
# coding=gbk
s = "中文"
print s

再試一下:
E:/Project/Python/Test>python ChineseTest.py
中文

正常咯:)
(二)
看一看它的長度:
# coding=gbk
s = "中文"
print len(s)
結果:4。
s這里是str類型,所以計算的時候一個中文相當于兩個英文字符,因此長度為4。
我們這樣寫:
# coding=gbk
s = "中文"
s1 = u"中文"
s2 = unicode(s, "gbk") #省略參數將用python默認的ASCII來解碼
s3 = s.decode("gbk") #把str轉換成unicode是decode,unicode函數作用與之相同
print len(s1)
print len(s2)
print len(s3)
結果:
2
2
2
(三)
接著來看看文件的處理:
建立一個文件test.txt,文件格式用ANSI,內容為:
abc中文
用python來讀取
# coding=gbk
print open("Test.txt").read()
結果:abc中文
把文件格式改成UTF-8:
結果:abc涓枃
顯然,這里需要解碼:
# coding=gbk
import codecs
print open("Test.txt").read().decode("utf-8")
結果:abc中文
上面的test.txt我是用Editplus來編輯的,但當我用Windows自帶的記事本編輯并存成UTF-8格式時,
運行時報錯:
Traceback (most recent call last):
? File "ChineseTest.py", line 3, in <module>
??? print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'/ufeff' in position 0: illegal multibyte sequence

原來,某些軟件,如notepad,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM)。
因此我們在讀取時需要自己去掉這些字符,python中的codecs module定義了這個常量:
# coding=gbk
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
?data = data[3:]
print data.decode("utf-8")
結果:abc中文

(四)一點遺留問題
在第二部分中,我們用unicode函數和decode方法把str轉換成unicode。為什么這兩個函數的參數用"gbk"呢?
第一反應是我們的編碼聲明里用了gbk(# coding=gbk),但真是這樣?
修改一下源文件:
# coding=utf-8
s = "中文"
print unicode(s, "utf-8")
運行,報錯:
Traceback (most recent call last):
? File "ChineseTest.py", line 3, in <module>
??? s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
顯然,如果前面正常是因為兩邊都使用了gbk,那么這里我保持了兩邊utf-8一致,也應該正常,不至于報錯。
更進一步的例子,如果我們這里轉換仍然用gbk:
# coding=utf-8
s = "中文"
print unicode(s, "gbk")
結果:中文

簡單地說,python中的print直接把字符串傳遞給操作系統,所以你需要把str解碼成與操作系統一致的格式。Windows使用CP936(幾乎與gbk相同),所以這里可以使用gbk。
最后測試:
# coding=utf-8
s = "中文"
print unicode(s, "cp936")
結果:中文

總結

以上是生活随笔為你收集整理的Python中使用中文的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。