2011-05-20 2 views
0

это мой код:, как иметь дело с японским словом с помощью питоном xlrd

#!/usr/bin/python 
#-*-coding:utf-8-*- 

import xlrd,sys,re 

data = xlrd.open_workbook('a.xls',encoding_override="utf-8") 
a = data.sheets()[0] 
s='' 
for i in range(a.nrows): 
    if 9<i<20: 
     #stage 
     print a.row_values(i)[1].decode('shift_jis')+'\n' 

но шоу:

???? 
???????? 
?????? 
???? 
???? 
???? 
???????? 

так что я могу сделать,

благодаря

+1

Похоже, вы читаете файл как UTF-8, а затем пытаетесь интерпретировать что-то как Shift JIS? Я не ожидал, что это сработает! –

ответ

2

Фон: В «современном» (Excel 97-2003) XLS-файле текст эффективно сохраняется как Unicode. В старых файлах текст сохраняется как 8-битные строки, а запись «кодовой страницы» указывает, как она кодируется, например. целое число 1252 соответствует кодированию, известному как cp1252 или windows-1252. В любом случае xlrd представляет извлеченный текст как объекты unicode.

Пожалуйста, вставьте эту строку в код:

print data.biff_version, data.codepage, data.encoding 

Если у вас есть новый файл, вы должны увидеть

80 1200 utf_16_le 

В любом случае, пожалуйста, измените ваш вопрос, чтобы сообщить о результатах.

Проблема 1: encoding_override требуется ТОЛЬКО, если файл является старым файлом И вы знаете/подозреваете, что запись кодовой страницы опущена или неверна. Он игнорируется, если файл является новым файлом. Вы действительно знаете, что файл pre-Excel-97 и текст закодирован в UTF-8? Если это так, оно может быть создано только каким-то серьезно запутанным сторонним программным обеспечением, и Excel взорвется, если вы попытаетесь открыть его с помощью Excel; посетите автора с бейсбольной битой. В противном случае не используйте encoding_override.

Задача 2: Вы должны имеют unicode объектов. Чтобы отобразить их, вам необходимо: encode (не декодировать) их от unicode до str с использованием подходящей кодировки. Очень удивительно, что print unicode_object.decode('shift-jis') не вызывает исключение и печатает вопросительные знаки.

Чтобы понять это, пожалуйста, изменить код, чтобы быть похожим на это:

text = a.rowvalues(i)[1] 
print i, repr(text) 
print repr(text.decode('shift-jis')) 

и доложить о результатах.

Так что мы можем помочь вам выбрать подходящую кодировку (если таковые имеются), скажите нам, что версия о том, что операционная система, которую вы используете, и следующий экран:

print sys.stdout.encoding 
import locale 
print locale.getpreferredencoding() 

Дальнейшее чтение:

(1) документация xlrd (раздел «Юникод», справа вверху) ... включен в дистрибутив или получить последнюю фиксацию here.

(2) Python Unicode HOWTO.

0

Почему ваша кодировка не отменяется при открытии shift-jis?

data = xlrd.open_workbook('a.xls',encoding_override="shift-jis") 

Если файл действительно Shift-JIS, есть много кодовых точек (ну, честно говоря, почти все из них), которые не совпадают с действительными UTF-8 кодовых точек. Если вы получаете незаконные символы (?), И ваш файл действительно UTF-8, и вы хотите вывести Shift-JIS, могу ли я предположить, что ваша оболочка вывода (для печати - возможно, файл будет в порядке) не сможет обработать кодировку ,