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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top