1

多くのUTF-8xmlファイルを含むzipアーカイブがあります。これらのファイルには主に英語のタグとテキストが含まれていますが、一部のタグには英語以外のテキストが含まれています。zipファイルを開いて、その中のxmlファイルを解析することに問題はありませんが、英語以外のテキストではエンコードが失われます。

xmlファイルを抽出してNotepad++で開くと、英語以外のテキストは次のようになります。

Курс карбованца к доллару не изменился на Украинской Межбанковской Валютной Бирже (УМВБ) - 176.100.

Python(Linuxボックス上)で抽出して読み取ると、テキストは次のようになります。

ÐÑÑÑ ÐºÐ°ÑбованÑа к доллаÑÑ Ð½Ðµ изменилÑÑ Ð½Ð° УкÑаинÑкой ÐежбанковÑкой ÐалÑÑной ÐиÑже (УÐÐÐ) - 176.100.

私のコードは次のようになります:

def parse(self, fp):
    # open/decompress zip file
    with zipfile.ZipFile(fp, 'r') as f:
        # get all files in zip
        comp_files = f.namelist()
        for comp_file in comp_files:
            cfp = f.open(comp_file, 'r')
            # parse xml
            tree = ElementTree.parse(cfp)
            ...parsing...

cfpからテキストをデコード/エンコードし、codecs.EncodedFile()でラップし、utf_8とutf_8_sigのエンコードを変更せずに入力してみました。英語以外のテキストを修正するにはどうすればよいですか?

4

1 に答える 1

5

表示されている結果は、UTF-8がlatin-1/iso-8859-1として誤ってデコードされています。

>>> x=u'Курс карбованца к доллару не изменился на Украинской Межбанковской Валютной Бирже (УМВБ) - 176.100.'
>>> print x.encode('utf8').decode('latin1')
ÐÑÑÑ ÐºÐ°ÑбованÑа к доллаÑÑ Ð½Ðµ изменилÑÑ Ð½Ð° УкÑаинÑкой ÐежбанковÑкой ÐалÑÑной ÐиÑже (УÐÐÐ) - 176.100.

Notepad ++を介してエンコードされた次のテキストを、BOMなしでUTF-8としてエンコードされた単一のファイルとしてzipファイルに保存しました。

<text>Курс карбованца к доллару не изменился на Украинской Межбанковской Валютной Бирже (УМВБ) - 176.100.</text>

実行可能にするために変更を加えたコード:

from xml.etree import ElementTree
import zipfile

def parse(fp):
    # open/decompress zip file
    with zipfile.ZipFile(fp, 'r') as f:
        # get all files in zip
        comp_files = f.namelist()
        for comp_file in comp_files:
            cfp = f.open(comp_file, 'r')
            # parse xml
            tree = ElementTree.parse(cfp)
            print tree.getroot().text
            print type(tree.getroot().text)

parse(open('file.zip'))

結果:

Курс карбованца к доллару не изменился на Украинской Межбанковской Валютной Бирже (УМВБ) - 176.100.
<type 'unicode'>

そのため、Linuxボックスに正しく表示されていないように見えますが、使用しているファイルの実際のサンプルがないと、さらに分析することは困難です。

于 2012-05-17T07:01:27.997 に答える