快樂Python快速上手系列10 中文編碼問題

2021-08-14 03:08:51 字數 2022 閱讀 7076

關於現實中文字元,總會遇到很多問題,比方說在python2.7中,預設情況,python對字元的解碼時採用ascii的形式,這也是為什麼當我們檔案裡新增了中文注釋,或者字串裡包含了中文字元,python會報錯如下:

if __name__ == '__main__':

s1 = "你好"

print(s1)

執行後錯誤資訊為:

file "d:\pythonproj\tlda_analyser\chinese_sym.py", line 2

syntaxerror: non-ascii character '\xe4' in file d:\pythonproj\tlda_analyser\chinese_sym.py on line 5, but no encoding declared; see for details

縱然在字串前面加上u也不行

if __name__ == '__main__':

s1 = u"你好"

print(s1)

執行錯誤依然為

file "d:\pythonproj\tlda_analyser\chinese_sym.py", line 3

syntaxerror: non-ascii character '\xe4' in file d:\pythonproj\tlda_analyser\chinese_sym.py on line 3, but no encoding declared; see for details

python預設的編碼格式為ascii,所以它無法解釋中文字元。

>>> sys.getdefaultencoding()

'ascii'

>>>

解決方法,在檔案的開頭加入希望python採用的編碼格式的宣告,例如:

#coding=utf-8

或者#-*- coding: utf-8 -*-

總體**示例如下:

#coding=utf-8

import chardet

if __name__ == '__main__':

s1 = "你好"

print(s1)

s_arr = bytearray(s1)

print(chardet.detect(s_arr))

if isinstance(s1, unicode):

print("s1 is unicode")

else:

print("s1 is not unicode")

s2 = u"你好"

s_arr = bytearray(s2, 'utf-8')

print(chardet.detect(s_arr))

if isinstance(s2, unicode):

print("s2 is unicode")

print(s2)

pass

輸出你好

s1 is not unicode

s2 is unicode

你好

但是在python3.5中就不存在這個問題啦,因為python3.5的系統編碼預設就是utf-8,下面**在python3.5中不需要擔心任何的問題。

if __name__ == '__main__':

s1 = "你好"

print(s1)

pass

實際應用中,顯示的時候還存在其他方面的問題,比方說,cmd的顯示問題,

可以相應的更改其codepage來達到目的。

舉例,我們要獲取的資訊是:

這就像你在翻譯英文的時候,出現了乙個單詞,這個單詞你查遍了牛津大詞典都沒找到對應的含**釋,那麼自然是會有問題的。

那假設,我還就想在cmd下執行這個python程式了,那麼可以去修改cmd的預設編碼型別為utf-8,對應的編碼為chcp 65001(utf-8)。在cmd 下輸入:chcp 65001 命令回車。

然後,修改

cmd的字型為「

lucida console

」,再來執行程式就可以被正確輸出了。

python快速上手

資料結構 淺拷貝和深拷貝加減 乘除乘方取餘取整 與c 等程式語言不同之處在於python不需要預先設定資料型別,根據運算自動給定資料型別,這一點與matlab相似。3 2 2 表示2次方 9 10 4 除法自動賦值float型別 2.5 8 3 2 定義 python的函式定義規則與c 不同,通常以...

快速上手python

python真的是很火啊,而且功能很強大。但是寫c寫習慣了,看到沒括號的真的難受。昨天寫了點matlab,然後今天配置了vscode,發現寫c有點手生了,看來還是要多練習。打算自己學一學py,把基礎語法搞一下,其他以後再說。for i in range a,b i從a到b的迴圈 執行語句while ...

Python快速上手(三)

這一節總結一下python在編碼當中的一些需要注意的地方 一.常用 1.print語句 在螢幕上橫向輸出指定的字元,如 print hello world 在互動式環境當中 是提示符,不是 的一部分。多個語句可以用逗號 隔開。如 print hello world 2.if語句 age 20 注意 ...