Обработка данных Unicode в XMLRPC - PullRequest
1 голос
/ 06 сентября 2010

Мне нужно перенести данные в OpenERP через XMLRPC с помощью TerminatOOOR.
Я отправляю имя со значением "Rotule right Aurélia".
В Python имя должно быть закодировано со значением: 'Rotule right Aur \ xc3\ xa9lia '
Но в TerminatOOOR (клиент xmlrpc) данные кодируются значением' Rotule middle Aur \ 357 \ 277 \ 275lia '
Так что на стороне сервера значение данных не декодируется правильно, и я получаю ошибкуданные.

terminateOOOR - это плагин ruby ​​для Kettle (продукт Java), и я думаю, он должен кодировать данные с помощью utf-8.
Я просто не знаю, почему это происходит так.
Любая помощь

Ответы [ 2 ]

1 голос
/ 13 сентября 2010

Эта проблема исходит от чайника.Моя программа использует Kettle для получения файла Excel, получения активного листа и передачи данных из этого листа в TerminateOOOR для дальнейшей обработки.На этапе чтения данных из файла Excel Kettle не может распознать кодировку, после чего он передает неверные данные в TerminateOOOR.

Мое решение для обхода проблемы вручную экспортирует Excel в CSV перед передачей данных в TerminateOOOR.Делая это, я не использую эту функцию для сопоставления имени столбца Excel с именем переменной (используется чайником).

0 голосов
/ 06 сентября 2010

Во-первых, всякий раз, когда вы имеете дело с текстом (и весь текст должен содержать какой-то не-1001 * US-ASCII символ, рано или поздно), вы будете гораздо счастливее делать это в Python 3.xа не в серии 2.х.если Py3 не вариант, попробуйте всегда использовать from __future__ import unicode_literals ( доступно в Python 2.6 и 2.7 ).

в основном, когда вы отправляете текст или любые другие данные по проводам, это происходит только в виде байтов (октетов битов), поэтому в какой-то момент их придется кодировать.попытайтесь выяснить, где именно эта кодировка происходит в вашей цепочке инструментов;при необходимости используйте инструмент отладки (или разверните операторы print( repr( x ) )), чтобы просмотреть соответствующие переменные.другое упомянутое вами программное обеспечение предположительно написано на PHP, языке, который, как известно, имеет проблемы с юникодом .вы говорите, что «он должен кодировать данные с помощью utf-8», но, с другой стороны, когда принимающая сторона видит данные входящего запроса RPC, эти данные уже должны быть в utf-8.его нужно будет декодировать, чтобы снова получить Unicode.

...