python的編碼問題
❶ python默認編碼問題
編碼就是二進制序列和代表的文本字元之間的映射關系。
你說的大多數問題是python2的,python3已經自動解決了,不需要這么麻煩。默認是utf8.
另外平時遇到的編碼問題,通常又和源碼本身的編碼、系統終端顯示的編碼、字體糾結在一起,要考慮的因素挺多的。
個人認為理解編碼最好的方法是嘗試用寫二進制序列的方法,輸出你想要的文本,多試錯就理解了。
❷ python編碼的問題
ot=os.listdir("F:")
printot
測試了下上面這兩條語句,中文命名的文件夾列表顯示如下:
['xd2xf4xc0xd6', 'xcdxbcxc6xac']
這不叫亂碼,只是以utf-8編碼表示中文字元串。你的本意是想要得到['abc', 'bcd', '音樂', '圖片']這種形式的輸出,但是實際顯示卻是utf-8編碼。
假設我們創建一個列表 ot = ['abc', 'bcd', '音樂', '圖片'],並且文件開頭定義了以utf-8格式進行編碼。那麼在內存里列表對象ot存儲的是'abc', 'bcd', 'xd2xf4xc0xd6', 'xcdxbcxc6xac'這四個值。
為什麼英文字元還是英文,中文字元就變成「亂碼」了呢?因為計算機不是人,它是看不懂'音樂'和'圖片'這幾個漢字字元的,它只認識字元的編碼值。對於多種編碼來說,鍵盤上那些英文字元編碼值都是一樣的。中文則不一樣。
為什麼列印字元串顯示出了中文,列印列表的時候顯示的卻是utf-8編碼?print 的作用是把計算機可理解的對象以人類可以理解的方式列印出來,具體顯示結果跟你要列印的對象有關,列印的是字元串,顯示的就是人類語言表示的字元串對象,列印的是列表,顯示的就是列表對象本身,也即該列表裡存儲的值。
printot表示列印一個列表對象ot,列印的是列表本身,所以它裡面的項以什麼形式存儲的就以
什麼形式顯示。
❸ Python 源程序編碼注意事項
默認情況下,Python 源文件是 UTF-8 編碼。在此編碼下,全世界大多數語言的字元可以同時用在字元串、標識符和注釋中 — 盡管 Python 標准庫僅使用 ASCII 字元作為標識符,這只是任何可移植代碼應該遵守的約定。如果要正確的顯示所有的字元,你的編輯器必須能識別出文件是 UTF-8 編碼,並且它使用的字體能支持文件中所有的字元。
你也可以為源文件制定不同的字元編碼。為此,在 #! 行(首行)後插入至少一行特殊的注釋行來定義源文件的編碼:
# -*- coding: encoding -*-
通過此聲明,源文件中所有的東西都會被當作用 encoding 指代的 UTF-8 編碼對待。在 Python 庫參考手冊 codecs 一節中你可以找到一張可用的編碼列表。
例如,如果你的編輯器不支持 UTF-8 編碼的文件,但支持像 Windows-1252 的其他一些編碼,你可以定義:
# -*- coding: cp-1252 -*-
這樣就可以在源文件中使用 Windows-1252 字元集中的所有字元了。這個特殊的編碼注釋必須在文件中的 第一或第二 行定義。
❹ python的編碼問題,一個小例子讓人很困惑
其實,字典中的uxxxx或者x..之類 就是utf-8編碼,經過解碼就是漢字了
print 列印的字元是自動解碼的。(根據第一行的 coding:utf-8)
print 列印的字典、列表之類的對象,一般沒經過解碼
如果你要輸出解碼的漢字,處理方法:
一,對每個scrapy抓取的數據都進行for循環decod
a={1:"你好",2:"謝謝",3:"對不起",4:"hi"}
forkina.keys():
printk,a[k].decode("utf-8")
二,使用json.mps
a={1:"你好",2:"謝謝",3:"對不起",4:"hi"}
importjson
printjson.mps(a,encoding='UTF-8',ensure_ascii=False)
❺ python的參數編碼問題,應該怎麼改
對於name.get_keyphrases()方法,name(也就是代碼中的tr4s)這個參數不能是字元(str),只能是integer 或bytes-like
❻ python文件編碼問題
還真有些弄不明白。不過我就明白的給你說。
不要用記事本,另存改變編碼,除非你目標編碼是ANSI
只要是文字都是字元編碼,不可能是內存中的編碼格式。WINDOWS使用MBCK(類似這個名子)的內部編碼。就是多位元組編碼的方式存在內存里。但是存在文件里一定是字元串,一定是正式的國際編碼。
ANSI是操作系統內的標准編碼。對於通常來說就是GB18030
unicode有很多編碼方式。包括utf-8,utf-16, big-5, gbk, gb18030等。所以這里微軟說的unicode估計是給微軟程序做序列化用的格式
unicode big endian同上。這個編碼應該是一個長位元組編碼用的。
順便說一下,微軟記事本的UTF-8編碼文件有問題,前面有1-2個位元組的識別用字元。如果你用python或者是其它操作系統讀取文件,可能會出問題。
❼ 新手,求教關於python3編碼的問題
你需要明白兩個概念:
什麼叫字元串、位元組串
在Python中字元串是指一串可以展示在終端里、供人閱讀的字元,至於字元採用什麼編碼並不重要,同樣的文字,可能是用Unicode、UTF-8或GBK編碼,但列印在終端中的內容相同,那麼就認為是同一串字元串。而位元組串是指將字元串通過某種編碼轉換得到的一串位元組,同樣一個字元串,使用不同的編碼轉換後得到的位元組串可能完全不同。
什麼叫encode、decode
encode中文為編碼,顧名思義,是將字元串以某種編碼形式編碼得到位元組串的過程;相反,decode中文為解碼,是將位元組串以某種編碼形式翻譯得到字元串的過程。
a是一個字元串,它的內容是「周傑倫」這三個字,類型是str;b = a.encode('utf-8')是將a以utf-8形式編碼得到的位元組串,它的內容是「周傑倫」這三個字的utf-8編碼,類型是bytes。
❽ Python編碼字元串解碼問題,怎麼解決
在將字元串寫入文件時,執行f.write(str),後台總是報錯:UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' in position 0: ordinal not in range(128),即ascii碼無法被轉換成unicode碼。
剛開始我以為Python默認的編碼是utf-8,所以使用decode方法和encode方法來進行編碼轉換,後來怎麼也不成功,於是懷疑是否默認編碼不是utf-8。
使用下面語句獲取python當前的默認編碼:
[python] view plain
import sys
print sys.getdefaultencoding()