我通过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)
当然,它不像我预期的那样有效。
我接受的那种字符编码类型的适当处理是什么?
答案 0 :(得分:2)
正确接收这些值(顺便说一句,特定值是“Ñérez”,而不是“Núñez”)。
当Python将list或dict的内容转储到控制台时,每个字符串项都显示为表示(结果或repr()
函数),而不是原始字符串。例如:
>>> print [0, u"é", 0]
[0, u'\xe9', 0]
我认为这一点的主要目的是通过将值复制粘贴回代码来直接重用值。因为字符串可以包含所有类型的引号和反斜杠,并且因为终端/网页/等可能无法显示非ascii,所以打印未更改的字符串内容将无法完成此任务。
这些字符串中的真实文本是可以的:
>>> print u'\xd1\xe9rez'
Ñérez
>>>
答案 1 :(得分:0)
u'\xd1\xe9rez'
似乎不是字符串Núñez.
,而是Ñérez
。您确定您的数据是什么吗?
除此之外,您的数据是unicode。 unicode没有编码,因为它已经是字符;你认为必要的任何修复应该发生在上游。您的Web框架是否为您提供了这些值?