Python CGI 中文显示问题

2015 年 12 月 8 日
 insolo
业余新手学习过程中碰到的小问题
如下代码,字符串中出现中文浏览器就无法正确显示, google N 久没搞清楚怎么处理,求各位高手指点

#!/usr/bin/python
#-*- coding: UTF-8 -*-
import cgi
import cgitb
print("Content-Type: text/html; charset=utf-8")
print("")
a = "中文"
print(a)
5906 次点击
所在节点    Python
18 条回复
TheCure
2015 年 12 月 8 日
a = u '中文'
hcwhan
2015 年 12 月 8 日
@callofmx 看 print(a)是 python3
insolo
2015 年 12 月 8 日
@callofmx
将#!/usr/bin/python 改为#!/usr/bin/python2 浏览器可以正常输出内容

默认的 Python 版本是 3.4.3 , Python2 的版本是 2.7.6
加上 u 之后浏览器端两个版本都没有显示内容,也没有报错
交互环境下 Python2 及 python3 都能正常输出内容
insolo
2015 年 12 月 8 日
@hcwhan python3 有什么不一样的讲究吗?
oyjc
2015 年 12 月 8 日
python3 默认输出的不是字节文本,所以,

print(a.encode())
est
2015 年 12 月 8 日
1. 不要学习 cgi 。这玩意是上个世纪的。
2. 不要在 windows 下用 py 。
clino
2015 年 12 月 8 日
楼主确认你的源代码文件真的是 utf8 的?
insolo
2015 年 12 月 8 日
@oyjc 加上 encode()后有内容输出,但是字节码没法读~

加上下面的代码后搞定了,虽然不是太理解机制是什么,谢谢各位
import codecs, sys
sys.stdout = codecs.getwriter('utf8')(sys.stdout.buffer)
wizardoz
2015 年 12 月 8 日
居然用 CGI
fy
2015 年 12 月 8 日
楼主,没记错的话 Content-Type: text/html; charset=utf-8 是不靠谱的。

编码是在<html><head>里面里面的那个
gamexg
2015 年 12 月 8 日
windows ?
print 时会自动根据环境转码的,猜测你的环境不是 utf8 ,所以转出来的不是 utf8 编码。
用手机不方便查,记得 sys 库可以查看系统编码,应该不是 utf8 。
neoblackcap
2015 年 12 月 8 日
Python 有自己的网关接口标准,叫 WSGI ,去看看具体的标准才再开始。

而且切莫重复造轮子,已经有很多 WSGI server ,一般人就是写个 application 的 callback 而已。
neoblackcap
2015 年 12 月 8 日
还有就是显示不出来主要就是编码错误, Python 3 的那个字符串语法那默认是生成 Unicode object 。在输出的时候我们是需要一个二进制的字符串,若非 ascii 的字符串,则会发生解码错误,导致显示不出来(还有的就是你的终端可能不支持对应的编码)。若想正确输出, Python3 在输出前请手动编码一次。
Zzzzzzzzz
2015 年 12 月 8 日
@fy 不, 仅仅是 http resp headers 里 content-type 段没有指明编码的情况下, http meta 里指明的编码才有用.
Zzzzzzzzz
2015 年 12 月 8 日
后面一个"http meta"是"html meta", 打错了.
fasling
2015 年 12 月 8 日
@est 我最近写的一个玩具程序,在 windows 上跑就好好的,在 mac 上一会儿就各种问题.不知道是我写的问题还是库的问题.大部分挂的时候是在调用 pycurl
yh7gdiaYW
2015 年 12 月 8 日
这种问题应该找百度...
julyclyde
2015 年 12 月 11 日
@insolo codecs.getwriter 这个需要执行,说明你在用 Windows

你从一开始就错了……哪儿有用 Windows 做互联网服务的

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

https://study.congcong.us/t/241997

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

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

© 2021 V2EX