当前位置: 首页 > 知识库问答 >
问题:

读取文件中的汉字并将其发送到浏览器

谭高峯
2023-03-14

我正在尝试制作一个程序

  • 从文件中读取汉字列表,然后根据这些汉字制作字典(将符号与其含义关联起来)

一旦我能够正确地阅读和存储这些标志(我试着将它们写入另一个文件,以检查它们是否正确,并且是否有效),我就不知道如何将它们发送到我的浏览器。

我连接到127.0.0.1:4321,我所能做到的最好的是得到一个(据说)网址编码的汉字及其翻译。

代码:

# -*- 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'编解码器无法编码字符u'\u4e09'在位置0:序数不在范围内(128)

我也尝试过使用“utf-16”进行编码/解码,但仍然会收到这种错误消息。

这是我的测试文件:

Sign    Translation

一   One
二   Two
三   Three
四   Four
五   Five
六   Six
七   Seven
八   Eight
九   Nine
十   Ten

所以,我的问题是:“如何让我的脚本中的汉字在我的浏览器中正确显示”?

共有1个答案

南宫凯康
2023-03-14

通过编写元标记声明页面的编码,并确保以UTF-8编码整个Unicode字符串:

self.wfile.write(u'''\
    <html>
    <headers>
    <meta http-equiv="content-type" content="text/html;charset=UTF-8">
    </headers>
    <body>
    {} : {}
    </body>
    </html>'''.format(rKey,db[rKey]).encode('utf8'))

和/或声明HTTP内容类型:

self.send_response(200)
self.send_header('Content-Type','text/html; charset=utf-8')
self.end_headers()
 类似资料:
  • 我正在从Java后端导出一个xls文件,但是当客户端收到它时,它被识别为xlsx文件,尽管它的名称中有. xls扩展名。我正在使用JasperXlsExporterBuilder构建xls文件。 发送文件时,我设置了响应类型: 这会导致问题,因为某些Excel版本无法处理识别的类型和文件扩展名之间的不匹配。

  • 我正在构建一个简单的PHP代理,缓存响应头和对象。 我的问题是,如果我登录到youtube.com,我就看不到自己的签名,youtube一直说登录(未签名),但是如果我停止我的脚本,打开youtube.com网站,我就会看到我自己签名了。我认为这是饼干的问题。是吗? 我的脚本只是抓取响应头并将其发送回浏览器。当我使用fopen()下载对象时,一些网站,如Google“Play STore” 我在响

  • 现在如何将此保存到浏览器。

  • 下面是我的文本文件: 这是我的代码片段: 我得到以下异常: 我该怎么办?

  • 我试图从Firefox中的新MediaRecorderAPI发送一个Blob到NodeJS以将其存储在文件中。Blob包含转换为webm-file的记录。我在发送之前将这个Blob分成一定的大小,以便能够通过webrtc数据通道提供的带宽发送它。这个看起来像这样: 在nodeJS方面,我试图将数据转换回webm文件,就像这样: 它告诉我,块被写入,但是文件是空的。我尝试了从blob派生的bas64

  • 我读过其他一些类似于此的问题,但都使用了imports和extras,除了importjava.io.*之外,我不想使用任何imports;也没有任何名单。另外,这个is方法中的for循环是我在搞乱它,因为我无法弄清楚它。 }public static void main(string[]args)抛出IOException,FileNotFoundException{int[]array=pro