關於現實中文字元,總會遇到很多問題,比方說在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 注意 ...