2014-02-16 59 views
0
# -*- coding: utf8 -*- 
s = '\xd6\xd0\xce\xc4' 
print s 

的代碼打印打印將字符串轉換爲Python中的Unicode?

中文 

不期望其摘錄。從字典中我可以看到s不是一些ASCII字符,因爲序號大於128.但是這就是爲什麼print會自動將字符串解碼爲utf8並打印出來(根據最初的編碼語句)?

更新:

我宣佈爲gbk的編碼,但保留文件的編解碼器爲UTF8。一個異常引發:

SyntaxError: 'gbk' codec can't decode bytes in position 8-9: illegal multibyte s 
equence 

這表明一個編解碼轉換失敗。哪裏?

回答

2

在Python 2.x中,print正好打印出你給它的字節串。你終於看到取決於你的終端如何解釋字節串。顯然你的終端設置爲gb2312編解碼器,它給出你看到的結果。

+0

這就是問題所在,我從'gbk'解碼。字節是'gbk'編解碼器。但上面的代碼可以正確運行並打印原始字符。 – zoujyjs

+0

編解碼器變換必定發生在某處。這就是爲什麼我猜測印刷品完成了這項工作。查看我的更新。 – zoujyjs

+0

@zoujyjs:嗯,我只能重複一遍自己:Python 2.x中的'print'會將你給它的字節發送給終端。然後你的終端將使用一些編解碼器來解釋它的輸入,但它不在終端用它獲得的字節做什麼的Python控制之下。如果一切設置正確,'sys.stdout.encoding'應該顯示你的終端使用什麼編解碼器(或假裝使用)。 –

0

如果您確實希望按照聲明進行打印,請嘗試print repr(s)

相關問題