python - Python 中非拉丁文本输出为无意义

标签 python unicode utf-8

我有一个脚本,它发出一个 JSON 请求,可以在任何脚本中返回文本,然后输出该文本(我对返回的文本没有任何控制权)。

它可以很好地处理拉丁字符,但其他脚本输出为 mojibake,我不确定出了什么问题。

在响应中,有问题的字符使用\u 语法进行编码。特别是,我有一个包含 \u00d0\u00b8\u00d1\u0081\u00d0\u00bf\u00d1\u008b\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5 的字符串> 应该输出为 испытание,但输出为 иÑпÑÑание

显然,这与 python 处理 unicode 和 UTF 的方式有关,但尽管我读过所有内容,我还是不太了解发生了什么,不知道如何解决它。

我尝试从下面的代码中提取要点:

response = requests.get(url, params=params, cookies=self.cookies, auth=self.auth)
text = response.text
print text
status = json.loads(text)
print status
for folder in status['folders']
  print folder['name']

输出:

{ "folders": [ { "name": "\u00d0\u00b8\u00d1\u0081\u00d0\u00bf\u00d1\u008b\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00b8\u00d0\u00b5" } ] }

{u'folders': [{ u'name': u'\xd0\xb8\xd1\x81\xd0\xbf\xd1\x8b\xd1\x82\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5' }]}

иÑпÑÑание

我也尝试过

status = response.json();
for folder in status['folders']:
    print folder['name']

结果相同。

注意,我实际上是将字符串传递给要显示的 GTKMenuItem,但是打印字符串的输出与在菜单中显示它的输出相同。

最佳答案

正如 @Ricardo Cárdenes 在 the comment 中所说服务器发送错误的响应。您得到的响应是双重编码的:

>>>> u = u'\xd0\xb8\xd1\x81\xd0\xbf\xd1\x8b\xd1\x82\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5'
>>>> print u.encode('latin-1').decode('utf-8')
испытание

正确的字符串如下所示:

>>>> s = {u"name": u"испытание"}
>>>> import json
>>>> print json.dumps(s)
{"name": "\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435"}

>>>> print s['name']
испытание
>>>> print s['name'].encode('unicode-escape')
\u0438\u0441\u043f\u044b\u0442\u0430\u043d\u0438\u0435
>>>> print s['name'].encode('utf-8')
испытание
>>>> s['name'].encode('utf-8')
'\xd0\xb8\xd1\x81\xd0\xbf\xd1\x8b\xd1\x82\xd0\xb0\xd0\xbd\xd0\xb8\xd0\xb5'

关于python - Python 中非拉丁文本输出为无意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21954694/

相关文章:

python - 使用 cx_oracle 在 Python 2.7 上执行具有多个查询的 SQL 文件

python - 使用 Python 检索街道地址的美国邮政编码

python - 在 setup.py 要求中提供 pytz 版本

python - 在 Python 中清理属于不同语言的文本

javascript - 使用javascript收集文档DOM树中的每个单词

python - PyAudio 和缓冲区溢出

php - 从 HTML 实体转换为 UTF-8

java - 在控制台中打印西类牙语文本并使用 Itext 7 将其写入 PDF 时出现问题

Python:从解析的查询返回的字符串的 Unicode 编码 (MeCab)

php - 如何在 MySQL 中存储特殊字符 - [AîA]