次のプログラムを作成しようとしています。
- ファイルから漢字のリストを読み取り、それらから辞書を作成します (記号とその意味を関連付けます)。
- ランダムな文字を選択し
BaseHTTPServer
、GET 要求を受け取ったときにモジュールを使用してブラウザーに送信します。
標識を適切に読み取って保存した後 (標識を別のファイルに書き込んで、標識が正しく機能していることを確認しました)、それらをブラウザーに送信する方法がわかりませんでした。
私は 127.0.0.1:4321 に接続します。私が管理した最善の方法は、(おそらく) URL エンコードされた中国語の文字とその翻訳を取得することです。
コード:
# -*- coding: utf-8 -*-
import codecs
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from SocketServer import ThreadingMixIn
import threading
import random
import urllib
source = codecs.open('./signs_db.txt', 'rb', encoding='utf-16')
# Checking utf-16 works fine with chinese characters and stuff :
#out = codecs.open('./test.txt', 'wb', encoding='utf-16')
#for line in source:
# out.write(line)
db = {}
next(source)
for line in source:
if not line.isspace():
tmp = line.split('\t')
db[tmp[0]] = tmp[1].strip()
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.end_headers()
message = threading.currentThread().getName()
rKey = random.choice(db.keys())
self.wfile.write(urllib.quote(rKey.encode("utf-8")) + ' : ' + db[rKey])
self.wfile.write('\n')
return
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""Handle requests in a separate thread."""
if __name__ == '__main__':
server = ThreadedHTTPServer(('localhost', 4321), Handler)
print 'Starting server, use <Ctrl-C> to stop'
server.serve_forever()
漢字を urlencode しないと、python からエラーが発生します。
self.wfile.write(rKey + ' : ' + db[rKey])
これは私にこれを与えます:
UnicodeEncodeError: 'ascii' コーデックは位置 0 の文字 u'\u4e09' をエンコードできません: 序数が範囲外です (128)
「utf-16」でエンコード/デコードも試しましたが、まだそのようなエラー メッセージが表示されます。
ここに私のテストファイルがあります:
Sign Translation
一 One
二 Two
三 Three
四 Four
五 Five
六 Six
七 Seven
八 Eight
九 Nine
十 Ten
それで、私の質問は次のとおりです。