1. 程式人生 > >python 2.7的字串編碼問題

python 2.7的字串編碼問題

【如何計算漢字字串的長度】

  s=u"我的"

  len(s)=2
  print(s.encode('utf-8')) # utf-8環境漢字長度是以字為單位,print的時候必須編碼為非unicode字元

【unicode字元】

  unichr(11) # 將十進位制的11轉換為unicode字元 u'\0x0b',除錯狀態下 其作為dict的value顯示空格,作為key時顯示u'\0x0b'。

【print中文】

  print str(u'你們') # 錯誤, str函式適用於非unicode,比如str('你們')
  print u'你們' # 非控制檯下面錯誤,print用ascii轉換unicode,必須先以utf8編碼,即 print(u'你們'.encode('utf8'))
  >> print u'你們' # 控制檯下面是正確的,原因未知,但是可以肯定的時候在控制檯python是用utf8進行轉碼

【如何在程式碼中直接列印unicode】

  print u'你們' + unicode('我的', encoding='utf8') # 中文必須先轉換unicode之後串接

  或者


  reload(sys)
  sys.setdefaultencoding("utf-8") # python預設是以ascii進行編解碼,跟"coding: UTF-8 "頭無關
  print u'你們' + '我的' # 這樣就可以混合串接列印,python會自動以utf-8編碼方式先將"我的"轉unicode,後一起encode
 
  所以在python2.7中,setdefaultencoding()非常重要,可以避免很多編碼錯誤。

【coding: UTF-8檔案頭】

  沒有檔案頭的時候 a=u'我' 顯示亂碼,print '我' 正常;所以暫時來看主要影響unicode,當然可能也跟執行的作業系統環境有關。