- 主题:utf8显示乱码
win11,apache24 http + cgi + python 3.9
apache conf文件设置了默认charset为utf-8
py文件头部声明了coding:utf-8,文件格式也是utf-8无bom
cmd窗口执行py文件,正常
但是浏览器打开py文件,结果就是中文乱码
浏览器打开htdocs下静态中文utf-8页面,就可以正常显示
查了半天,也没找到原因,有了解的吗
--
FROM 221.218.137.*
这年头还有用cgi的。。。。
Python代码最开始先输出个
print("Content-Type: text/plain; charset=UTF-8\r\n")
试试
text/plain 可以改成 text/html 视情况而定
【 在 liduo (利多) 的大作中提到: 】
: win11,apache24 http + cgi + python 3.9
: apache conf文件设置了默认charset为utf-8
: py文件头部声明了coding:utf-8,文件格式也是utf-8无bom
: ...................
--
FROM 221.217.55.*
这个加了,也不行
【 在 wincss 的大作中提到: 】
: 这年头还有用cgi的。。。。
: Python代码最开始先输出个
: print("Content-Type: text/plain; charset=UTF-8\r\n")
: ...................
--
FROM 221.218.137.*
那后面的内容呢,HTML里还有一个编码声明,如果你声明和实际不符的话就会乱码
【 在 liduo (利多) 的大作中提到: 】
: 这个加了,也不行
--
FROM 61.149.239.*
都加了,还是乱码;如果这些地方都改为gbk,就能显示
页面
源码
python
[upload=3][/upload]
【 在 wincss 的大作中提到: 】
: 那后面的内容呢,HTML里还有一个编码声明,如果你声明和实际不符的话就会乱码
:
--
FROM 106.121.163.*
我大致上知道是怎么回事了。。。
你在 apache 的配置里加一个 SetEnv PYTHONIOENCODING utf-8
应该就行了
【 在 liduo (利多) 的大作中提到: 】
: 都加了,还是乱码;如果这些地方都改为gbk,就能显示
: 页面
: [upload=1][/upload]
: ...................
--
FROM 61.149.239.*
感谢,终于可以了!
【 在 wincss 的大作中提到: 】
: 我大致上知道是怎么回事了。。。
: 你在 apache 的配置里加一个 SetEnv PYTHONIOENCODING utf-8
: 应该就行了
: ...................
--
FROM 106.121.161.*
原因就是 Python 解释器会检查运行环境,当你输出 unicode 字符串的时候,会根据
运行环境来 encode,在你加上那个配置之前,Python 认为解释器外的环境是 GBK 的。
就把你输出的内容用 GBK 来编码了。
代码开头的 encoding=utf-8 配置只是声明代码是用 utf-8 存的,影响解释器如何处
理源代码,但管不了解释器如何处理输出。
cgi 的话最好还是不要直接输出 unicode,可以在输出前 encode 一下。主流的 web
框架应该都是做过处理的。
【 在 liduo (利多) 的大作中提到: 】
: 感谢,终于可以了!
--
FROM 61.149.239.*
学习了
看来cgi+python的用的不多啊。。。
【 在 wincss 的大作中提到: 】
: 原因就是 Python 解释器会检查运行环境,当你输出 unicode 字符串的时候,会根据
: 运行环境来 encode,在你加上那个配置之前,Python 认为解释器外的环境是 GBK 的。
: 就把你输出的内容用 GBK 来编码了。
: ...................
--
FROM 106.121.161.*
那 python 怎么配合 Apache,用 Django 之类的框架?
【 在 liduo (利多) 的大作中提到: 】
: 学习了
: 看来cgi+python的用的不多啊。。。
--
FROM 103.40.221.*