2010-04-25 4 views
0

Я извлечь данные из китайских символов из БД и записать данные в Excel с помощью xlwt,
код, как показано ниже:xlwt данные искажены

ws0.write(0,0, unicode(cell, 'big5')) 

Это нормально под Windows, но когда я deloyed под Linux , данные в excel garbled,
Не могли бы вы помочь?

ответ

0

Это поможет, если вы разместите код, который вы фактически выполнили. Предполагая, что ws0 является объектом Worksheet, правильный синтаксис равен ws0.write(row_index, column_index, unicode_text).

Что относится к cell, и как вы извлекли его из какой базы данных?

Что означает «данные в excel garbled»? Что вы используете в Linux для просмотра содержимого файла XLS? Что вы на самом деле видели на экране? Можете ли вы правильно отображать китайские символы в Linux с помощью другого программного обеспечения?

Попробуйте ввести это в интерактивном режиме Python на Linux:

>>> import xlwt 
>>> b = xlwt.Workbook() 
>>> s = b.add_sheet('zh') 
>>> big5_text = '\xa7A\xa6n\xa1I' 
>>> u_text = big5_text.decode('big5') 
>>> s.write(0, 0, u_text) 
>>> b.save('nihao.xls') 

Затем попробуйте открыть файл XLS с OpenOffice Calc ... что вы видите?

Update

(1) "Код, который вы запускали" должно быть более чем на 1 линии; пожалуйста, покажите это.

(2) Пожалуйста, запустите небольшой фрагмент кода, который я вам предоставил, и сообщаем результаты. Если это сработает, мы можем сосредоточиться на таких вещах, как то, как вы получаете данные из какой базы данных. [Пожалуйста, ответьте на этот вопрос тоже]

(3) Пожалуйста, ответьте на вопрос об отображении китайского языка под Linux.

(4) Считайте, что видя "???" вместо китайских (или любых других) символов обычно является результатом unicode_text.encode('some_encoding', 'replace') (или другого кода с таким же намерением) с неправильным кодированием (например, «ascii») - возможно, предшествует аналогичный код de. xlwt делает unicode_text.encode(), чтобы сохранить ваши строки в файле unicode; он использует «latin1» или «utf_16le», как требуется для кодирования, и «strict», а не «replace» для следующего arg. Если Excel покажет вам «???», вполне вероятно, что данные уже искажены, прежде чем вы подадите их на xlwt. Что говорит print repr(cell)?

(5) Если вы запускаете одни и те же версии xlwt и Python с теми же входными данными и тем же сценарием Python, выходной файл с Linux должен быть идентичен байты за байт с выходным файлом из Windows. Различия в версиях xlwt и Python вряд ли могут сделать файлы разными. Пожалуйста, сравните файлы, полученные в результате короткого сценария, который я вам дал, используя двоичное сравнение (например, fc /b ... в окне «Командная строка Windows»). Пожалуйста, укажите версии Python и xlwt, которые вы используете в каждой среде.

(6) Рассмотрите возможность перехода на the usual forum for xlwt questions ... таким образом вы можете легко отправить мне файлы, если необходимо, и я получаю электронную почту при создании новой публикации вместо того, чтобы опросить веб-сайт с интервалами ...

+0

На самом деле, я отправляю excel в качестве прикрепленного файла, который был создан под Linux и просматривает прикрепленный файл под окнами, он показан как ??? , в то время как файл, созданный под окнами, в порядке. –

+0

Теперь введите этот маленький скрипт в Linux и отправьте результат в Windows. Что ты видишь? –

+0

Я запустил ваш скрипт, и все в порядке. Я думаю, что это некоторая проблема с модулем cx_Oracle. (Я использую cx_Oracle для получения данных из oracle) В окне cx_Oracle находится cx_oracle_4.4.1.9i (python 2.5.2, python 2.5 xlwt-0.72, с полной установкой 10g oracle) , а на Linux - cx_oracle_5.0.3-11g (python 2.4.3, oracle-instantclient11.2-basic-11.2.0.1.0-1.i386) Итак, я пытаюсь установить cx_Oracle для 9i или 10g с помощью instantclient, но Сообщения об ошибках: undefined sysmbol: OCIDB Shutdown –

Смежные вопросы