我真的很难找到答案。
我正在编写一个简单的cgi脚本,输入的GET参数将被html编码
例如£ -> %A3
这是我在浏览器中使用的2个测试网址。
A =%7B&安培; B =%A3
?α= {和b =£
当我从cgi.FieldStorage循环遍历参数时,我得到一个带b参数的异常。 - 我知道它与某种形式的编码相关,但我无法解决问题。
key = a
value = {
key = b
错误:'ascii'编解码器无法对位置12中的字符'\ ufffd'进行编码:序数不在范围内(128)
key = a
value = {
key = b
错误:'ascii'编解码器无法对位置12中的字符'\ xa3'进行编码:序数不在范围内(128)
以下是测试CGI脚本。
#!/opt/python-3.3.4/bin/python3
import cgitb
import cgi
import sys
print("Content-Type: text/html; charset=utf-8")
print("")
print("<html>")
print("<body>")
print("<h1>Hello</h1>")
form = cgi.FieldStorage()
#form = cgi.FieldStorage(encoding="utf8")
for i in form.keys():
print("<br>key = ", i)
try:
tmp = form[i].value
print("<br>value = %s" % tmp)
except Exception as err:
print("<br>ERROR:", err)
print("</body>")
print("</html>")
答案 0 :(得分:1)
我相信GET只支持ASCII字符。 因此,您需要将POST用于非ASCII字符