cgi python3编码问题

时间:2014-04-30 07:38:45

标签: python-3.x character-encoding cgi

我创建了cgi脚本(在带有apache的localhost上运行),它将从textarea加载文本,然后我将使用它。我有像š,ť,é等字符的问题,他们没有正确显示。我尝试了很多方法。这是我的短代码的一个版本,我正在寻找正确的方法来处理它。

#!C:/Python33/python 
# -*- coding: UTF-8 -*-

import cgi
import cgitb

cgitb.enable()

form = cgi.FieldStorage()
if form.getvalue('textcontent'):
   text_content = form.getvalue('textcontent')
else:
   text_content = ""


print ("Content-type:text/html")
print ()
print("<!DOCTYPE html>")
print ("<html>")
print ("<head>")
print("<meta charset='UTF-8'></meta>")
print ("</head>")
print ("<body>")
print ("<form>")
print ("text_area:<br />")
print ("<textarea name='textcontent' rows='5' cols='20'></textarea>")
print ("<br />")
print ("<input type='submit' value='submit form' />")
print ("</form>")
print("<p>")
print(text_content) 
print("</p>")
print ("</body>")
print ("</html>")

这种方式是使用UTF-8,当我尝试写东西时,看起来像(写到textarea并提交):

čítam -> ��tam

当我在html部分使用latin-1作为python编码和utf-8作为charset时,它的工作方式如下:

časa -> časa (correctly)

但是带有重音符号的字符(例如áno)会返回错误:

UnicodeEncodeError: 'charmap' codec can't encode character '\\ufffd' in position 0: character maps to <undefined>\r

使用sys.stdout.encoding编写cp1250编码(在Windows下工作),然后使用sys.getdefaultencoding()返回utf-8

我还尝试了text_content = (form.getvalue('textcontent')).encode('utf-8'),例如单词číslo,结果为b'\xef\xbf\xbd\xef\xbf\xbdslo'

我不知道如何处理这个问题。

我需要číslo -> číslo示例。

更新:现在我有一个用于pyhton和UTP编码的UTF-8。它似乎与文本一起工作(比较单词与字典,......)进展顺利,所以现在只有一个问题是输出看起来像 tam,所以我需要修改它看起来像čítam而不是 tam。 / p>

更新2:当编码为UTF-8时,在浏览器UTF-8中也显示 s,当我将浏览器编码更改为cp1250时,它会正确显示,但是当我重新刷新网站或单击“提交”按钮时,它会写入错误UnicodeEncodeError: 'charmap' codec can't encode character '\\ufffd'

更新3:在linux上尝试过,在遇到一些问题之后我发现apache服务器使用了错误的编码(ascii),但我还是无法解决这个问题。将/etc/apache2/envvars修改为PATH LANG =“sk_SK.UTF-8”但是在终端中通过gedit得到了一些警告:编辑效果不佳。所以编码仍然是ascii

1 个答案:

答案 0 :(得分:0)

以这种方式写下你的表格:

<form accept-charset="utf-8">

accept-charset = "utf-8"放入您的表单中,它可以解决此问题