我正在使用免費的Web主機,但選擇不使用任何Python框架,並且試圖打印保存在源文件中的漢字(使用emacs保存utf-8編碼的文件)到生成的HTML頁面。我認爲Unicode在Python 3.1中「起作用」,所以我很困惑。我發現三種解決方案無效。我可能只是缺少一兩個細節。Python 3.1服務器端無法向客戶端輸出Unicode字符串
主機是Alwaysdata,它的使用非常簡單,所以我對他們如何將各部分放在一起的細節知之甚少。我所做的只是上傳或編輯(使用ssh)Python文件到www文件夾,更改權限,將瀏覽器指向正確的URL,並且它可以工作。
我第一次嘗試,這對當地IDLE作品(還有服務器的Python的命令行交互shell,這使我更糊塗了,爲什麼就不能當它傳遞到瀏覽器中運行)
#!/usr/bin/python3.1
mystr = "世界好"
print("Content-Type: text/html\n\n")
print("""<!DOCTYPE html>
<html><head><meta charset="utf-8"></head>
<body>""")
print(mystr)
錯誤是:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3:
ordinal not in range(128)
然後我試圖
print(mystr.encode("utf-8"))
資源ulting中沒有錯誤,但下面不期望的輸出到瀏覽器:添加
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
三,以下系,但得到了一個錯誤:
import sys
sys.setdefaultencoding("utf-8")
AttributeError: 'module' object has no attribute 'setdefaultencoding'
最後,f.write更換打印:
import codecs
f = codecs.open(sys.stdout, "w", "utf-8")
mystr = "你好世界"
...
f.write(mystr)
錯誤:
TypeError: invalid file: <_io.TextIOWrapper name='<stdout>'
encoding='ANSI_X3.4-1968'>
如何獲得輸出?我需要使用框架來快速修復嗎?
你是如何運行代碼的?請注意,任何試圖避免的解決方案都註定要失敗 - 正如[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html)(無疑在其他地方)中指出的那樣,網絡連接總是*字節,而不是'unicode'。 – delnan 2012-04-04 15:13:05
我不認爲我理解它是如何運行的所有細節。該帳戶在Alwaysdata中,我所做的只是將Python文件FTP到www文件夾(或使用ssh編輯),更改權限,然後將瀏覽器指向該文件。 – 2012-04-04 15:21:40
假設你正在使用CGI,這是一個重複:http://stackoverflow.com/questions/5515007/python-3-cgi-how-to-output-raw-bytes – 2012-04-04 16:54:50