【问题标题】:Handling unicode data in XMLRPC在 XMLRPC 中处理 unicode 数据
【发布时间】:2011-04-08 17:44:26
【问题描述】:

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

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

【问题讨论】:

    标签: python ruby unicode xml-rpc


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不是Python或者xmlrpclib的问题。我可以在 Python 脚本中做得很好。 color = {'name':u'Rotule right Aurélia'} oorpc.create('my.color', color)。在幕后,解释器识别数据编码(通过指定# -- coding: utf-8 --),对其进行编码并将其发送给知道如何处理编码数据的服务器。我想我的问题是 Ruby 1.8 (Terminatooor) 以缺乏 unicode 支持而闻名。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-23
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2015-10-18
      相关资源
      最近更新 更多