2012-11-16 89 views
2

Possible Duplicate:
How to make python 3 print() utf8蟒蛇CGI腳本不會在Linux上

我不能讓蟒蛇CGI打印希伯來文字符在Linux上的Html網頁打印希伯來語。這是一個演示問題的腳本:

#!/usr/bin/python3 
print('Content-Type: text/html; charset=utf-8\n\n') 
print ('<html><body>') 
print ('first') 
print ('second') 
print ('תמות') 
print ('third') 
print ('</body></html>') 

該文件保存在utf-8(不含BOM)中。我直接從瀏覽器地址欄中調用這個.cgi腳本。輸出是:

first second 

而希伯來語單詞和任何後續都失蹤。沒有錯誤顯示在Apache日誌或啓用cgitb

我測試與Apache 2.2和Python 3.2,在Linux的Ubuntu的12.04和分區6,與Firefox,鉻和IE瀏覽器。當然,我可以在任何純HTML頁面上看到希伯來語。在Windows上它工作得很好。

解決方案:

import sys 
print (sys.stdout.encoding) 

遞給我:

ANSI_X3.4-1968 

最後這個解決我的問題:

import sys, codecs 
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach()) 

這是另一種選擇:

import sys, io 
sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding='utf-8') 
+1

當你做一個「查看源代碼」時,你看到了什麼? –

+0

源顯示: 第一 第二 – eyaler

+2

試着看一下http://stackoverflow.com/questions/3597480/how-to-make-python-3-print-utf8 –

回答

1

看起來像sys.stdout的默認編碼不一定是UTF-8。如果你想使用sys.stdout.buffer.write,試試這個:

sys.stdout.buffer.write('תמות'.encode('utf-8')) 
+0

與除第一個(否則我得到一個錯誤)交換到sys.stdout.write.buffer,我根本沒有輸出的所有打印 – eyaler

+0

你可以添加你的新代碼的問題,所以我們可以看到它? –

+0

打印(sys.stdout.encoding)給出ANSI_X3.4-1968 – eyaler