Come affrontare la parola giapponese usando Python XLRD
Domanda
Questo è il mio codice:
#!/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'
.
Ma mostra:
????
????????
??????
????
????
????
????????
.
Allora, cosa posso fare,
Grazie
Soluzione
Sfondo: in un file XLS "moderno" (Excel 97-2003), il testo è efficacemente memorizzato come Unicode. Nei file precedenti, il testo è memorizzato come stringhe a 8 bit e un record "CodePage" racconta come è codificato ad esempio e.g. L'intero 1252 corrisponde alla codifica nota come cp1252
o windows-1252
. In entrambi i casi, xlrd
presenta il testo estratto come oggetti Unicode.
Si prega di inserire questa linea nel tuo codice:
print data.biff_version, data.codepage, data.encoding
.
Se hai un nuovo file, dovresti vedere
80 1200 utf_16_le
.
In ogni caso, si prega di modificare la tua domanda per segnalare il risultato.
Problema 1: è richiesto encoding_override
solo se il file è un vecchio file e sai / sospetto che il record di codepage sia omesso o sbagliato. Viene ignorato se il file è un nuovo file. Sai davvero che il file è pre-excel-97 e il testo è codificato in UTF-8? In tal caso, può essere stato creato solo da alcuni software di 3a partito gravemente deluso ed Excel salterà se si tenta di aprirlo con Excel; Visita l'autore con una mazza da baseball. Altrimenti, non usare encoding_override.
Problema 2: dovrebbe avere oggetti unicode
. Per visualizzarli, è necessario Codifica ( non decodifica ) da unicode
a str
utilizzando una codifica adatta. È molto sorprendente che print unicode_object.decode('shift-jis')
non solleva un'eccezione e stampando i punti interrogativi.
Per aiutarla a capirlo, per favore cambia il tuo codice per essere così:
text = a.rowvalues(i)[1]
print i, repr(text)
print repr(text.decode('shift-jis'))
.
e segnala il risultato.
In modo che possiamo aiutarti a scegliere una codifica appropriata (se presente), dicci quale versione di quale sistema operativo si sta utilizzando e quale sia il seguente display:
print sys.stdout.encoding
import locale
print locale.getpreferredencoding()
.
Ulteriore lettura:
(1) La documentazione XLRD (sezione su Unicode, fino in fondo) ... incluso nella distribuzione o ottieni l'ultimo commit qui .
(2) il Python Unicode Howto .
Altri suggerimenti
Perché la tua codifica non è l'override su Apri Maiusc-Jis?
data = xlrd.open_workbook('a.xls',encoding_override="shift-jis")
.
Se il file è veramente Shift-Jis, ci sono lotti dei punti di codice (francamente, quasi tutti) che non si sovrappongono a punti codici UTF-8 validi.Se stai ricevendo caratteri illegali (?) E il tuo file è davvero UTF-8 e vuoi emettere Maiusc-Jis, potrei suggerire che il tuo shell di uscita (per la stampa - probabilmente un file andrebbe bene) non può gestire la codifica.