我创建了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
答案 0 :(得分:0)
以这种方式写下你的表格:
<form accept-charset="utf-8">
将accept-charset = "utf-8"
放入您的表单中,它可以解决此问题