Python中字符编码的困难

时间:2013-10-08 15:03:29

标签: python encoding character-encoding

我通过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)

当然,它不像我预期的那样有效。

我接受的那种字符编码类型的适当处理是什么?

2 个答案:

答案 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框架是否为您提供了这些值?

相关问题