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

时间:2013-03-08 07:31:12

标签: python webserver

我经常使用以下内容快速启动Web服务器以提供当前文件夹中的HTML内容(用于本地测试):

python -m SimpleHTTPServer 8000

我是否有一种相当简单的方法可以做到这一点,但让服务器使用UTF-8编码而不是系统默认值来提供文件?

2 个答案:

答案 0 :(得分:17)

出现同样的问题,以下代码对我有用。

要启动具有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之类的参数,以便可以指定要监听的地址和端口。

答案 1 :(得分: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__中,因此IDE可能会显示警告,如果不想看到它,可以使用importlib代替它。例如:

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