如何使用Python SimpleHTTPServer提供UTF-8编码的文件?

13 投票
2 回答
7438 浏览
提问于 2025-04-17 18:23

我经常使用下面的方式,快速启动一个网页服务器,从当前文件夹提供HTML内容(用于本地测试):

python -m SimpleHTTPServer 8000

有没有什么简单的方法可以做到这一点,让服务器以UTF-8编码来提供文件,而不是使用系统默认的编码呢?

2 个回答

0

你也可以用Python脚本来运行它。

from functools import partial
from http.server import SimpleHTTPRequestHandler, test
import os

print('http://localhost:8000/')
wk_dir = os.getcwd()
SimpleHTTPRequestHandler.extensions_map = {k: v + ';charset=UTF-8' for k, v in SimpleHTTPRequestHandler.extensions_map.items()}
test(HandlerClass=partial(SimpleHTTPRequestHandler, directory=wk_dir), port=8000, bind='')

因为test不在http.server.__all__里面,所以你的开发工具可能会显示一个警告。如果你不想看到这个警告,可以用importlib来代替它。例如:

import importlib
http_server = importlib.import_module('http.server')
http_server.test(HandlerClass=partial(SimpleHTTPRequestHandler, directory=wk_dir), port=8000, bind='')
27

我也遇到过同样的问题,下面的代码对我有效。

要启动一个支持UTF-8编码的SimpleHTTPServer,只需在终端中复制粘贴以下内容(适用于Python 2)。

python -c "import SimpleHTTPServer; m = SimpleHTTPServer.SimpleHTTPRequestHandler.extensions_map; m[''] = 'text/plain'; m.update(dict([(k, v + ';charset=UTF-8') for k, v in m.items()])); SimpleHTTPServer.test();"

确保你在HTML文件中提前设置了正确的字符集。

更新: 适用于Python 3的内容:

python3 -c "from http.server import test, SimpleHTTPRequestHandler as RH; RH.extensions_map={k:v+';charset=UTF-8' for k,v in RH.extensions_map.items()}; test(RH)"

test函数还可以接受一些参数,比如portbind,这样你就可以指定要监听的地址和端口。

撰写回答