在XMLRPC中处理unicode数据

时间:2010-09-06 11:23:41

标签: python ruby unicode xml-rpc

我必须使用TerminatOOOR通过XMLRPC将数据迁移到OpenERP 我发送一个名为“RotulerightAurélia”的名字。
在Python中,名称用值编码:'Rotule right Aur \ xc3 \ xa9lia'
但是在TerminatOOOR(xmlrpc客户端)中,数据的编码值为'Rotule middle Aur \ 357 \ 277 \ 275lia'。 所以在服务器端,数据值没有正确解码,我得到的数据不好。

terminateOOOR是Kettle(Java产品)的ruby插件,我猜它应该用utf-8编码数据。
我只是不知道为什么会这样发生。
有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

这个问题来自Kettle。 我的程序正在使用Kettle获取Excel文件,获取活动工作表并将该工作表中的数据传输到TerminateOOOR以进行进一步处理。 在从Excel文件读取数据的阶段,Kettle无法识别编码,然后它会向TerminateOOOR提供错误的数据。

我的解决方案是在将数据提供给TerminateOOOR之前手动将excel导出到csv。通过这样做,我不使用该功能将excel列名称映射为变量名称(由水壶使用)。

答案 1 :(得分:0)

首先,每当你处理文本时(所有文本迟早都会包含一些非US-ASCII字符),你会更乐意在Python 3.x而不是在2.x系列。如果Py3不是一个选项,请尝试始终使用from __future__ import unicode_literalsavailable in Python 2.6 and 2.7)。

基本上,当你通过线路发送文本或任何其他数据时,这只会以字节(位的八位位组)的形式发生,所以它必须在某个时刻进行编码。试着找出工具链中编码的确切位置;如有必要,使用调试工具(或部署print( repr( x ) )语句)来查看相关变量。您提到的其他软件大概是用PHP编写的,这是一种known to have issues with unicode的语言。你说'它应该通过utf-8编码数据',但另一方面,当接收端看到传入的RPC请求的数据时,该数据应该已经在utf-8中。它必须被解码才能再次获得unicode。