как работать с японским словом с помощью python xlrd

#python #xlrd

#python #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? Я бы не ожидал, что это сработает!

Ответ №1:

Справочная информация: В «современном» (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 требуется, ТОЛЬКО если файл является старым файлом, И вы знаете / подозреваете, что запись кодовой страницы опущена или неверна. Это игнорируется, если файл является новым файлом. Вы действительно знаете, что файл создан до Excel-97, а текст закодирован в UTF-8? Если это так, то он мог быть создан только каким-то серьезно заблуждающимся сторонним программным обеспечением, и Excel взорвется, если вы попытаетесь открыть его с помощью Excel; посетите автора бейсбольной битой. В противном случае не используйте encoding_override.

Проблема 2: У вас должны быть unicode объекты. Чтобы отобразить их, вам нужно закодировать (не декодировать) их от 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 (раздел о Unicode, прямо впереди)… включено в дистрибутив, или получите последнюю фиксацию здесь.

(2) руководство по Python Unicode.

Ответ №2:

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

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

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