【问题标题】:special chars in CGI Python \\xe4 not äCGI Python \\xe4 中的特殊字符不是 ä
【发布时间】:2018-05-28 13:25:46
【问题描述】:

一个 Python cgi 脚本接收一个内容类型为:application/x-www-form-urlencoded 的 POST XMLHttpRequest。这些值未编码。 这看起来像这样:

  xhr.open("POST", "URL", true);
  xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  xhr.send('RID=123&RName=Bäcker');

在 Chromes 开发者工具中,Datasource 中的表单数据在源代码中如下所示:

RID=123&RName=Bäcker

或在解析视图中像这样:

RID:123

RName:贝克尔

python3 脚本在字段存储中获取表单:

#! /usr/bin/env python3    
# -*- coding: UTF-8 -*-
import cgi
myform = cgi.FieldStorage()
print(str(myform["RName"].value))

打印输出是 B\xe4cker? 我曾尝试使用 .encode('iso-8859-1') 或 decode('utf-8') 但不是很成功。

如何更改正确显示的编码或代码类型?

【问题讨论】:

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


    【解决方案1】:

    尝试为str()函数添加编码:

    #! /usr/bin/env python3    
    # -*- coding: UTF-8 -*-
    import cgi
    myform = cgi.FieldStorage()
    print(str(myform["RName"].value, encoding = 'iso-8859-1'))
    

    【讨论】:

    • 经过一些尝试,这让我找到了一个可行的解决方案。我已经在桌面 \w chrome 上进行了测试,问题出现在 ios safari 上。似乎不同设备发送的表单之间存在一些差异......这段代码str(myform["RName"].value).encode("utf-8")最终完成了这项工作
    猜你喜欢
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2012-05-20
    • 2023-03-15
    • 2013-04-16
    • 2020-10-17
    相关资源
    最近更新 更多