热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python3CGI中文问题UnicodeEncodeError

首先不是python2,是python3其次python3中没unicode()这个东东!在CGI时的错误提示:Traceback(mostrecentcalllast):F
首先不是python2,是python3
其次python3中没unicode()这个东东!

在CGI时的错误提示:
Traceback (most recent call last): File "/usr/lib/cgi-bin/aa.py", line 29, in print(aaa) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) 

操作系统:Ubuntu 9.10 Desktop
Apache: 使用apt-get install apache2进行的安装
Python: 源代码编译安装的python3.2

源代码:aa.py

#!/usr/bin/python3
# coding:utf-8

print("Content-type: text/html\r\n\r\n")
print("Environment")

import sys

sys.stderr = sys.stdout

import os

os.environ["LANG"] = "en_US.UTF-8"


print(os.environ)

print("
")
print("
")
print(sys.getdefaultencoding())
print("
")
print("
")

aaa = "中文"

print(aaa.encode('utf-8'))
print("
")
print("
")
print(aaa)


在SHELL中执行的结果(使用print(aaa)能够正确的打印“中文”)

aksai@aksai-laptop:/usr/lib/cgi-bin$ ./aa.py 
Content-type: text/html


Environment
environ({'GDM_KEYBOARD_LAYOUT': 'us', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'LESSOPEN': '| /usr/bin/lesspipe %s', 'QT_IM_MODULE': 'xim', 'LOGNAME': 'aksai', 'USER': 'aksai', 'HOME': '/home/aksai', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games', 'DISPLAY': ':0.0', 'SSH_AGENT_PID': '2162', 'LANG': 'en_US.UTF-8', 'TERM': 'xterm', 'SHELL': '/bin/bash', 'XDG_SESSION_COOKIE': 'd0e2ff0a2bea80f62af6e9d44cb416fd-1314800273.494167-419471248', 'SESSION_MANAGER': 'local/aksai-laptop:@/tmp/.ICE-unix/2118,unix/aksai-laptop:/tmp/.ICE-unix/2118', 'SHLVL': '1', 'WINDOWID': '65011716', '_': './aa.py', 'XMODIFIERS': '@im=SCIM', 'USERNAME': 'aksai', 'COLORTERM': 'gnome-terminal', 'SSH_AUTH_SOCK': '/tmp/keyring-gXkTYH/socket.ssh', 'GNOME_KEYRING_SOCKET': '/tmp/keyring-gXkTYH/socket', 'GDMSESSION': 'gnome', 'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-uwisuseGp7,guid=665f17044637987ab53184d34e5e4292', 'ORBIT_SOCKETDIR': '/tmp/orbit-aksai', 'GNOME_KEYRING_PID': '2103', 'GTK_IM_MODULE': 'scim-bridge', 'DESKTOP_SESSION': 'gnome', 'LESSCLOSE': '/usr/bin/lesspipe %s %s', 'GTK_MODULES': 'canberra-gtk-module', 'OLDPWD': '/usr/lib/cgi-bin/Trash', 'GDM_LANG': 'en_US.UTF-8', 'XAUTHORITY': '/var/run/gdm/auth-for-aksai-Fy9q8t/database', 'SPEECHD_PORT': '7560', 'XDG_DATA_DIRS': '/usr/share/gnome:/usr/local/share/:/usr/share/', 'PWD': '/usr/lib/cgi-bin', 'GTK_RC_FILES': '/etc/gtk/gtkrc:/home/aksai/.gtkrc-1.2-gnome2', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:hl=44;37:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:'})




utf-8




b'\xe4\xb8\xad\xe6\x96\x87'




中文


在作CGI访问时的错误(访问地址:http://127.0.0.1/cgi-bin/aa.py)

Environment environ({'SERVER_SOFTWARE': 'Apache/2.2.12 (Ubuntu)', 'SCRIPT_NAME': '/cgi-bin/aa.py', 'SERVER_SIGNATURE': '
Apache/2.2.12 (Ubuntu) Server at 127.0.0.1 Port 80
\n', 'REQUEST_METHOD': 'GET', 'HTTP_KEEP_ALIVE': '115', 'SERVER_PROTOCOL': 'HTTP/1.1', 'QUERY_STRING': '', 'PATH': '/usr/local/bin:/usr/bin:/bin', 'LANG': 'en_US.UTF-8', 'HTTP_ACCEPT_CHARSET': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 'HTTP_USER_AGENT': 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.10) Gecko/20100915 Ubuntu/9.10 (karmic) Firefox/3.6.10', 'HTTP_CONNECTION': 'keep-alive', 'SERVER_NAME': '127.0.0.1', 'REMOTE_ADDR': '127.0.0.1', 'SERVER_PORT': '80', 'SERVER_ADDR': '127.0.0.1', 'DOCUMENT_ROOT': '/var/www', 'SCRIPT_FILENAME': '/usr/lib/cgi-bin/aa.py', 'SERVER_ADMIN': 'webmaster@localhost', 'HTTP_HOST': '127.0.0.1', 'REQUEST_URI': '/cgi-bin/aa.py', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'GATEWAY_INTERFACE': 'CGI/1.1', 'REMOTE_PORT': '45753', 'HTTP_ACCEPT_LANGUAGE': 'en-us,en;q=0.5', 'HTTP_ACCEPT_ENCODING': 'gzip,deflate'})

utf-8

b'\xe4\xb8\xad\xe6\x96\x87' 

Traceback (most recent call last): File "/usr/lib/cgi-bin/aa.py", line 29, in print(aaa) UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) 


Apache环境配置(/etc/apache2/envvars):

# envvars - default environment variables for apache2ctl

# Since there is no sane way to get the parsed apache2 config in scripts, some
# settings are defined via environment variables and then used in apache2ctl,
# /etc/init.d/apache2, /etc/logrotate.d/apache2, etc.
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
export APACHE_PID_FILE=/var/run/apache2.pid

## The locale used by some modules like mod_dav
#export LANG=C
export LANG="en_US.UTF-8"
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale

export LANG


Apache的Deamon控制脚本(/etc/init.d/apache2)修改ENV变量如下:

#ENV="env -i LANG=C PATH=/usr/local/bin:/usr/bin:/bin"
ENV="env -i LANG=en_US.UTF-8 PATH=/usr/local/bin:/usr/bin:/bin"


传说中错误的原因是没有指定LANG,但不知道我修改Apache的配置是否正确。感谢各位赐教!

2 个解决方案

#1


sys.stdout.buffer.write(b"Content-type: text/html;encoding=UTF-8\n\n") # Not 100% sure about the spelling.
sys.stdout.buffer.write(aaa.encode('UTF8'))

#2


你前面的print(aaa.encode('utf-8'))就挺好。

尽量避免直接打印unicode。就算你搞好了,过两天升级了下系统或者发给别人兴许又挂了。别把时间浪费在这些能避免的事情上。

推荐阅读
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 本文介绍了在Ubuntu系统中清理残余配置文件和无用内容的方法,包括清理残余配置文件、清理下载缓存包、清理不再需要的包、清理无用的语言文件和清理无用的翻译内容。通过这些清理操作可以节省硬盘空间,提高系统的运行效率。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
sunhuan
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有