2011-03-10 63 views
2

我在使Python正確處理我的unicode文本時遇到了一些問題。Python寫入unicode字符錯誤

我煮它歸結爲以下幾點:

>>>print 'Høst' 
Høst 
>>>print u'Høst' 
HÃ,st 
>>>u = u'Høst' 
>>>u 
u'H\xf8st' 

sys.stdout.encoding說,這是使用UTF-8,這是最有可能的原因,第一,非Unicode,版畫作品。如果我只是需要打印一些東西,那麼這將是很好的。但是,我正在構建一個XML文檔,從SQL Server中的數據,然後它真的需要是真正的Unicode。

我的數據看起來像它的非常好的Unicode數據,u'H \ xf8st」看我的權利,那麼爲什麼Python中保持輸出爲‘哈,ST’?

回答

3

ø是ISO-8859-1 \xc3\xb8\xc3\xb8也是Unicode 00F8字符的UTF-8(ø)。也許你的控制檯真的接受ISO-8859-1而不是UTF-8作爲輸入,這意味着sys.stdout.encoding是錯誤的。

+2

或者您的終端設置不正確。 – 2011-03-10 12:13:57

+0

至少解決了我的打印問題。現在我可以尋找類似的東西來修復我的xml生成代碼。 – Simon 2011-03-10 12:23:11

+0

你有什麼問題與xml代?只需將您的unicode文本編碼爲正確的編碼即可。 – 2011-03-10 12:48:04

0

你在使用ipython嗎?它的unicode支持被破壞,我可以用ipython重現你的輸出。在標準的python shell中試試你的例子。

+0

這是Ubuntu上的標準Python。我剛剛在Windows上進行了測試,並且按預期工作。即:>>> printu'Høst'返回Høst而不是HÃ,st- – Simon 2011-03-10 12:17:32

+0

輸出中沒有包圍數字。 – 2011-03-10 12:17:53

+1

Unicode Python控制檯輸出適用於Windows,但不適用於Ubuntu。現在這是一個令人驚訝的事情! – 2011-03-10 12:22:04