Python中字符编码的困难

2024-05-16 22:10:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

当然,它并不像我预期的那样起作用。你知道吗

对于我正在接受的这种类型的字符编码,合适的处理方法是什么?你知道吗


Tags: 字符串inid编码参数get字符例子
2条回答

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

除此之外,您的数据是unicode。unicode没有编码,因为它已经是字符了;任何你认为必要的修正都应该发生在上游。您的web框架是否提供了这些值?你知道吗

正确接收值(顺便说一句,该特定值是“ninerez”,而不是“Núñez”)。你知道吗

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

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

我相信这一点的主要目的是通过将值复制粘贴回代码中,使它们可以直接重用。因为字符串可以包含各种引号和反斜杠,而且终端/网页/etc可能无法显示非ascii,所以打印未更改的字符串内容将不起作用。你知道吗

这些字符串中的真实文本是正确的:

>>> print u'\xd1\xe9rez'
Ñérez
>>> 

相关问题 更多 >