0

我通过 GET 请求参数接收数据。其中一些参数是字符串,我猜由于编码问题,我很难正确显示它们。

这是我收到的一个例子:

{'id_origen': u'9', 'apellidos': u'\xd1\xe9rez', 'nombre': u'Pimp\xe1m'}

您可以看到键 'apellidos' 的值没有被正确接收。它出现

u'\xd1\xe9rez'

代替

Núñez.

我试图以一种非常原始的方式解决这个问题,例如用“á”替换像“\xe1”这样的字符的每个外观。但这也给我带来了问题。这是我想出的代码:

tabla = {'\xE1':'á', '\xE9':'é', '\xED': 'í', '\xF3':'ó', '\xFA':'ú'}

logger.info ("Valor del argumento antes del bucle de urldecode: %s" % valor)
for k, v in tabla.iteritems():
    if k in valor:
        valor.replace(k, v)

当然,它并没有像我预期的那样工作。

我收到的这些类型的字符编码的适当处理是什么?

4

2 回答 2

2

这些值被正确接收(顺便说一下,那个特定的值是“Ñérez”,而不是“Núñez”)。

当 Python 将 list 或 dict 的内容转储到控制台时,每个字符串项都显示为表示形式(结果或repr()函数),而不是原始字符串。例如:

>>> print [0, u"é", 0]
[0, u'\xe9', 0]

我相信这样做的要点是通过将值复制粘贴回代码来直接重用它们。因为字符串可以包含各种引号和反斜杠,并且由于终端/网页/等可能无法显示非 ascii,所以打印未更改的字符串内容将无法完成这项工作。

这些字符串中的真实文本是可以的:

>>> print u'\xd1\xe9rez'
Ñérez
>>> 
于 2013-10-08T15:21:08.807 回答
0

u'\xd1\xe9rez'似乎不是字符串Núñez.,而是Ñérez. 你确定你的数据是什么?

除此之外,您的数据是 unicode。unicode 没有编码,因为它已经是字符了;您认为必要的任何修复都应在上游进行。您的 Web 框架是否为您提供了这些价值?

于 2013-10-08T15:19:34.123 回答