在XMLRPC中处理Unicode数据

1 投票
2 回答
2092 浏览
提问于 2025-04-16 03:45

我需要通过XMLRPC把数据迁移到OpenERP,使用的是TerminatOOOR。
我发送的名字是“Rotule right Aurélia”。
在Python中,这个名字会被编码成:'Rotule right Aur\xc3\xa9lia '。
但是在TerminatOOOR(xmlrpc客户端)中,这个数据却被编码成了'Rotule middle Aur\357\277\275lia'。
所以在服务器那边,数据没有正确解码,导致我得到错误的数据。

TerminatOOOR是一个用于Kettle(Java产品)的Ruby插件,我猜它应该是用utf-8来编码数据的。
我就是不知道为什么会出现这样的情况。
谁能帮帮我?

2 个回答

0

首先,当你处理文本时(而且所有文本迟早都会包含一些非US-ASCII字符),你会发现用Python 3.x来处理这些文本会让你更开心,而不是用2.x系列。如果你不能使用Python 3,尽量使用 from __future__ import unicode_literals(这个在Python 2.6和2.7中可以用)。

基本上,当你通过网络发送文本或其他数据时,这些数据最终都是以字节(就是一串二进制位)形式发送的,所以在某个时刻必须进行编码。你需要找出在你的工具链中,编码到底是在什么地方发生的;如果有必要,可以使用调试工具(或者使用 print( repr( x ) ) 语句)来查看相关的变量。你提到的其他软件可能是用PHP写的,这种语言在处理unicode时有一些问题。你说“它应该用utf-8编码数据”,但另一方面,当接收方看到一个传入的RPC请求的数据时,这些数据应该已经是utf-8格式了。为了再次得到unicode,必须先解码。

1

这个问题出现在Kettle上。我的程序使用Kettle来获取一个Excel文件,获取活动工作表,并将该工作表中的数据传输到TerminateOOOR进行进一步处理。

在从Excel文件读取数据的过程中,Kettle无法识别编码,因此它给TerminateOOOR提供了错误的数据。

我的解决办法是手动将Excel导出为csv格式,然后再将数据提供给TerminateOOOR。这样做的话,我就不需要使用Kettle将Excel列名映射为变量名的功能了。

撰写回答