Python 3.3 cgi:无法使用值%A3解码GET参数

时间:2014-03-07 14:37:05

标签: python http encoding cgi

我真的很难找到答案。

我正在编写一个简单的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>")

1 个答案:

答案 0 :(得分:1)

我相信GET只支持ASCII字符。 因此,您需要将POST用于非ASCII字符