0

セルのエンコーディングを調整するために、Pythonを介してExcelにアクセスしています。これまでの私のコード:

from xlrd import *
from xlwt import *

wb = open_workbook('a.xls')

s = wb.sheets()[0]

for row in range(s.nrows):
e = s.cell(row,9).value
r = s.cell(row,11).value
print e,' ',r.decode('cp1251')

このコードを実行すると、次のエラーが発生します。

Traceback (most recent call last):
  File "C:\Users\pem\workspace\a\src\a.py", line 17, in <module>
    print e,' ',r.decode('cp1251')
  File "C:\Python27\lib\encodings\cp1251.py", line 15, in decode
    return codecs.charmap_decode(input,errors,decoding_table)
  File "C:\Python27\lib\encodings\cp1251.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\xf6' in position 23: character maps to <undefined>

eは英語のテキストであり、rは1251エンコーディングのロシア語の翻訳であることを私は知っています。

4

1 に答える 1

2

Python 2を使用していると仮定します(Unicodeの処理はPython 3では異なります)。

エンコーディングをUnicoder.decode('cp1252')にデコードするために使用します。rこれにより、タイプのオブジェクトが得られますunicode

印刷しようとすると、最初に暗黙的にエンコードされます。つまりstr、デフォルトのエンコードに変換されますansi。コンソールがUnicodeをサポートしている場合は、次のように言って印刷できます。

print xyz.encode('utf-8')

Pythonのstr文字列は8ビットバイト(文字)で構成されていunicodeますが、1つの文字を任意のUnicode文字にすることができる実際の文字列を表していることに注意してください。(Python 3では、これをより明確にするためstrにに置き換えられbytesunicode名前が変更されました。)str

.decode()on astrを使用すると、指定したエンコーディングを使用して(どこかから読み取った)一部のバイトから「意味のある」Unicode文字列を取得できますが.decode()unicodeオブジェクトを使用すると、逆になります。エンコーディングを使用して文字列のバイト表現を取得できます。お好みの。

于 2012-08-21T11:36:07.433 に答える