python 中文編碼問題

2021-08-31 02:23:57 字數 2257 閱讀 7246

python檔案中文和 print 的中文的總結如下:

1 # coding=utf-8 或者 # coding=gbk 表明這個檔案使用何種編碼

如果出現非acs ii 碼,則必須制定編碼

否則 s = "中文"

或 s = u"中文" 都會報錯

2 print是python把 字串丟給作業系統,再丟出之前,要求字元的編碼與 檔案指定的編碼一致(而不必與作業系統預設編碼一致, 貌似print 會根據 檔案編碼--》作業系統編碼做自動轉化)

假設 作業系統編碼為gbk

# coding=gbk

s = "中文"

print s

和 # coding=utf-8

s = "中文"

print s

都沒有問題

# coding=gbk

s = u"中文"

print s // 報錯,因為此時 s 是unicode 編碼, 而檔案指定的卻是gbk

print s.encode("gbk") //ok

print s.encode("utf-8") // 不報錯,亂碼

utf-8 與unicode是不同的

# coding=utf-8

s = u"中文"

print s // 報錯,因為此時 s 是unicode 編碼, 而檔案指定 utf-8 同樣報錯

print s.encode("utf-8") //ok

print s.encode("gbk") // 報錯, 其原因是print引起的, 不是encode!是因為此時的utf8的編碼gbk 也能識別。 儘管作業系統是 gbk,但是最終編碼錯誤的,無法print

3 python 中的 str 和 "%s"%var

在檔案中,str,和%s 作用基本相同

str(unicode_var) 和 "%s"%unicode_var ,如果unicode_var 中包含非ascii 的字元時,都將報錯。

特例:在互動平台是, 可以 "%s"%unicode_var ,其中unicode_var 包含非asc2字元,如

>>> ss = u'中文'

>>> "%s"%ss

u'\u4e2d\u6587'

str(ss)則報錯

>>> str(ss)

traceback (most recent call last):

file "", line 1, in

unicodeencodeerror: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

×××特例××××

在互動控制台時,可以直接print unicode

>>> ss = u"中文"

>>> print ss

中文 但是不能被序列化

>>> str(ss)

traceback (most recent call last):

file "", line 1, in

unicodeencodeerror: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

str相當於檔案中的print (非控制台)

str不能直接針對unicode,必須是已經編碼了的 「位元組碼序列」

3 關於字元長度

# coding=gbk 或者

s = "中文"

su = u"中文"

print len(s) // 4

print len(s.decode('gbk')) // 2

print len(aa.decode('gbk').encode("utf-8")) //6,utf-8使用3位元組表示一中文

pirnt len(su) //2

print s

//len在針對 被編碼了的字元(其實位元組陣列),得到的位元組個數,

// 針對unicode時候,可以想象是 數出了 unicode物件的個數(乙個中文[|英文]乙個unicode物件)

[color=red]ps:最容易造成困惑的一種情況,

"%s %s "%(codec1, codec2), 其中codec1,和codec2 編碼不一致, unicode,與gbk,utf-8之類的編碼混雜的情況。[/color]

更詳細的參考文章:

python中文編碼問題

在 python 中對中文進行處理的時候,往往涉及到編碼轉換的問題,通常使用以下三種編碼格式 utf 8 gbkunicode 國內用的比較多的是 gbk格式,unicode 是乙個很好的編碼方案,將世界各國的語言進行了統一的編碼,美國人後來覺得自己吃了大虧,於是又搞了一種變長編碼的 utf 8 的...

python中文編碼問題

為什麼會報錯 unicodeencodeerror ascii codec can t encode characters in position 0 1 ordinal not in range 128 本文就來研究一下這個問題。字串在python內部的表示是unicode 編碼,因此,在做編碼轉...

python中文編碼問題

一道非常簡單的python小題,可要搞死我了 題目 輸入某年某月某日,判斷這一天是這一年的第幾天?這題很簡單,但我想要的是這樣的效果 輸入 1月1 輸出 1 也就是說,需要 原本的 片段 a raw input b 月 c a.index b 就是輸入一行字串,找到 月 在哪,然後切割成兩部分 根據...