python3 http.server 作为小文件服务器时,通过 url 访问文件遇到中文乱码怎么处理?

2021-04-07 12:27:01 +08:00
 css3

目录下有一堆 txt 文件,里边有中文,通过 python3 http.server 创建的文件服务器,通过 url 打开 txt里边中文全是乱码,有什么办法解决吗,stackoverflow 找了个答案,尝试 charset=utf-8 也无济于事

3619 次点击
所在节点    程序员
24 条回复
ericls
2021-04-07 12:31:24 +08:00
这个需要浏览器处理吧……
ericls
2021-04-07 12:32:06 +08:00
我估计那些文件本来就不是 utf8 的
ungrown
2021-04-07 12:38:34 +08:00
同意楼上看法,这个问题没有可以完美解决的银子弹的,编码这个东西就算尝试去推测也依然会有例外,要么统一编码,要么想办法在文件里注明编码,要么就在浏览器端改解码方式
css3
2021-04-07 12:39:51 +08:00
@ericls 是 utf-8
css3
2021-04-07 12:40:03 +08:00
@ungrown 浏览器怎么改
crab
2021-04-07 12:41:24 +08:00
浏览器自动识别的啊。测试了你说的这个情况正常。
cz5424
2021-04-07 12:43:32 +08:00
Win 下指定 gbk 看看
0TSH60F7J2rVkg8t
2021-04-07 12:44:39 +08:00
你需要设置的不是 http 的 charset 头,而是设置 content-type,给你的 content-type 增加下面一整行(注意别当两个 head 字段处理):
Content-Type:text/plain; charset=utf-8
lujjjh
2021-04-07 12:50:18 +08:00
方法 1
python3 -c "from http.server import SimpleHTTPRequestHandler as H, test; H.extensions_map['.txt'] = 'text/plain; charset=UTF-8'; test(H)"

方法 2
Chrome / Edge 安装 https://chrome.google.com/webstore/detail/set-character-encoding/bpojelgakakmcfmjfilgdlmhefphglae 插件,手动设置成 UTF-8
css3
2021-04-07 14:11:17 +08:00
@ahhui 方法一无效,方法 2 还未尝试
css3
2021-04-07 14:11:37 +08:00
@lujjjh 方法一无效,方法 2 还未尝试
xcstream
2021-04-07 14:19:17 +08:00
浏览器不适合直接打开 txt
用 html 比较合适
lujjjh
2021-04-07 14:20:11 +08:00
@css3 方法 1 无效大概率是被你的浏览器缓存了,Python 的 http server 支持 If-Modified-Since
css3
2021-04-07 14:22:33 +08:00
@lujjjh

@ahhui 我看了一下好像没有生效呐,response_headers 里边的 Content-Type: text/plain 还是默认值
css3
2021-04-07 14:23:16 +08:00
@lujjjh 我也认为是缓冲,还特意在无痕模式下验证了一下
turan12
2021-04-07 14:23:30 +08:00
header 加个 attachment,把文件做附件下载
css3
2021-04-07 14:26:08 +08:00
@turan12 就是要在线预览
waytoexplorewhat
2021-04-07 14:47:44 +08:00
我的做法是自己开一个项目,然后在返回 txt 的时候指定编码格式,总共也没有多少行代码
ch2
2021-04-07 14:54:20 +08:00
多了解一下 http 协议跟浏览器机制吧,你得告诉浏览器它是个啥玩意,要不然信息量不足,它就按默认的方式处理,当然是乱码的
love
2021-04-07 14:57:06 +08:00
python -m http.server 就别用了,这就是个玩具,有一大堆正经的同类开源软件不好吗
node 版的同类玩具 serve 都比这货好 10 倍

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/768671

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX