我正在尝试制作一个程序:
- 从文件中读取中文字符列表,从中创建字典(将符号与其含义相关联)。
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
所以,我的问题是:“我怎样才能让来自我的脚本的汉字在我的浏览器中正确显示”?