Python CGI 中文显示问题

2015-12-08 15:03:26 +08:00
 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)
5313 次点击
所在节点    Python
18 条回复
TheCure
2015-12-08 15:17:34 +08:00
a = u '中文'
hcwhan
2015-12-08 15:36:26 +08:00
@callofmx 看 print(a)是 python3
insolo
2015-12-08 15:41:38 +08:00
@callofmx
将#!/usr/bin/python 改为#!/usr/bin/python2 浏览器可以正常输出内容

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

print(a.encode())
est
2015-12-08 16:27:25 +08:00
1. 不要学习 cgi 。这玩意是上个世纪的。
2. 不要在 windows 下用 py 。
clino
2015-12-08 16:34:37 +08:00
楼主确认你的源代码文件真的是 utf8 的?
insolo
2015-12-08 17:26:30 +08:00
@oyjc 加上 encode()后有内容输出,但是字节码没法读~

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

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

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

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

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

https://www.v2ex.com/t/241997

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

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

© 2021 V2EX