问题描述
我有一个可执行的Python 3.6 CGI脚本,该脚本正在Apache2服务器Ubuntu 18.04上运行。
当脚本尝试执行此行时:
print("<p>Something about latitude x°</p>")
,
它会引发错误:
'ascii'编解码器无法在位置203处编码字符'\ xb0':序数 不在范围内(128)
即使在HTML头中使用<Meta charset="utf-8">
将编码指定为UTF-8。
当我尝试用.encode('utf-8')
对字符串强制使用UTF-8时,即
print("<p>Something about latitude x°</p>".encode('utf-8'))
,
错误消失了,但度数符号显示为UTF8十六进制
关于纬度x \ xc2 \ xb0
我尝试在export PYTHONIOENCODING=UTF-8
中设置环境变量/etc/environment
,并创建了一个全局变量/etc/profile.d/python-encoding.sh
,然后使用source
重新加载了两个文件,并重新启动了Apache2服务器{{1} },但无济于事。
CGI版本:2.6。
解决方法
在Apache2 .conf中声明默认字符集并为Python编码设置环境变量可以达到目的,如此处所述:Python CGI - UTF-8 doesn't work
@furas指出。