背景:「最新の」(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)PythonUnicodeHOWTO。