2013-10-08 46 views
0

我正在通過GET請求參數接收數據。其中一些參數是字符串,並且由於編碼問題我能夠正確顯示它們,所以我很困難。Python中字符編碼的困難

這是我所收到一個例子:

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

你可以看到,沒有被正確接收的關鍵「apellidos」的值。看來

u'\xd1\xe9rez' 

,而不是

Núñez. 

我想在一個非常原始的方式來解決這個問題,保換,如「\ XE1」與「A」字符的每次出現,例如。但它也給我帶來了問題。這是我想出的代碼:

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

u'\xd1\xe9rez'似乎不是字符串Núñez.而是Ñérez。你確定你的數據是什麼?

除此之外,你的數據是unicode。沒有unicode編碼,因爲它已經是字符;無論你認爲必要的修復應該發生在上游。你的web框架是否給了你這些價值?

2

正確接收值(順便說一下,這個值是「Ñérez」,而不是「Núñez」)。

當Python將list或dict的內容轉儲到控制檯時,每個字符串項都顯示爲表示(結果或repr()函數),而不是原始字符串。例如:

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

我相信這個主要點是通過將值複製粘貼到代碼中來直接重用值。由於字符串可以包含各種引號和反斜槓,並且由於終端/網頁/等可能無法顯示非ascii,因此打印未更改的字符串內容將無法完成這項工作。

這些字符串裏面真正的文字是好的:

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