我正在进行一个迁移项目,将Web服务器的一层从Python 2.7.8升级到Python 3.6.3,并且在某些特殊情况下遇到了障碍。
当接收到客户端的请求时,负载使用pyzmq在本地传输,而现在在Python 3中,它与
现在,我接收到的负载是使用iso-8859-1(latin-1)编码方案编码的,我可以很容易地将其转换为字符串,如payload.decode('latin-1'),并将其传递给下一个服务(svc-save-entity),该服务期望字符串参数。
然而,后续服务'svc-save-entity'希望非Latin-1字符(如果存在)以ASCII字符引用的形式表示(例如,对于
我正在努力寻找一种高效的方法来实现这种转换。有没有Python专家可以指导我?基本上,我需要一个名为
str
不同,而是以bytes
交互。现在,我接收到的负载是使用iso-8859-1(latin-1)编码方案编码的,我可以很容易地将其转换为字符串,如payload.decode('latin-1'),并将其传递给下一个服务(svc-save-entity),该服务期望字符串参数。
然而,后续服务'svc-save-entity'希望非Latin-1字符(如果存在)以ASCII字符引用的形式表示(例如,对于
é
,使用é
而不是十六进制\xe9
)。我正在努力寻找一种高效的方法来实现这种转换。有没有Python专家可以指导我?基本上,我需要一个名为
decode_tostring()
的函数的定义:payload = b'Banco Santander (M\xe9xico)' #payload is in bytes
payload_str = decode_tostring(payload) #function to convert into string
payload_str == 'Banco Santander (México)' #payload_str is a string in ASCII Character Reference
请解释decode_tostring()
的定义。:)
if any(char >= 192 for char in list(payload)): return payload.decode('latin-1').encode('ascii', errors='xmlcharrefreplace').decode('ascii')
else: return payload.decode('latin-1')
- Achin Saxena\xe9
),后续服务将无法处理它。也许需要在那一端进行改进,这可能是我接下来要做的任务 :) - Achin Saxena