Python 3.x cgi python3编码问题
我创建了cgi脚本(使用apache在localhost上运行),它将从textarea加载文本,然后我将使用它。我对像ť、ť、ť、ť这样的角色有问题,。。它们没有正确显示。我试过很多方法。这是我在WCH中的简短代码的一个版本,我正在寻找正确的方法来处理它Python 3.x cgi python3编码问题,python-3.x,character-encoding,cgi,Python 3.x,Character Encoding,Cgi,我创建了cgi脚本(使用apache在localhost上运行),它将从textarea加载文本,然后我将使用它。我对像ť、ť、ť、ť这样的角色有问题,。。它们没有正确显示。我试过很多方法。这是我在WCH中的简短代码的一个版本,我正在寻找正确的方法来处理它 #!C:/Python33/python # -*- coding: UTF-8 -*- import cgi import cgitb cgitb.enable() form = cgi.FieldStorage() if form
#!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>")
当我在html部分中使用拉丁语-1作为python编码,utf-8作为字符集时,它的工作原理如下:
časa -> časa (correctly)
但对于带有重音符号的字符(例如:否),它返回错误:
UnicodeEncodeError: 'charmap' codec can't encode character '\\ufffd' in position 0: character maps to <undefined>\r
UnicodeEncodeError:“charmap”编解码器无法对位置0中的字符“\\ufffd”进行编码:字符映射到\r\n
使用sys.stdout.encoding
写入cp1250
编码(在windows下工作),使用sys.getdefaultencoding()
返回utf-8
我还尝试了text\u content=(form.getvalue('textcontent')).encode('utf-8')
例如wordčslo
,结果是b'\xef\xbf\xbd\xef\xbf\xbdslo'
我不知道如何处理这个问题
我需要číslo->čslo
fo示例
更新:现在我有了一个html编码的Pyton的UTF-8。看起来文本处理(将单词与字典进行比较,…)进展顺利,所以现在唯一的问题是输出看起来像��tam,所以我需要修改它,使其看起来像čtam,而不是��谭
更新2:当编码为UTF-8时,在浏览器UTF-8中也会显示�s、 当我将浏览器编码更改为cp1250时,它会正确显示,但当我重新刷新站点或单击“提交”按钮时,它会写入错误UnicodeEncodeError:“charmap”编解码器无法编码字符“\\ufffd”
更新3:在linux上尝试过,在遇到一些问题后,我发现apache服务器使用了错误的编码(ascii),但我还不能解决这个问题。将
/etc/apache2/envvars
修改为PATH LANG=“sk_sk.UTF-8”,但gedit在终端中收到一些警告,指出编辑不好。因此编码仍然是ascii用以下方式编写表单:
<form accept-charset="utf-8">
在表单中放入accept charset=“utf-8”
,它可以解决此问题
<form accept-charset="utf-8">