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 就是輸入一行字串,找到 月 在哪,然後切割成兩部分 根據...