0

私はBeautifulSoupを使用していくつかのXMLファイルを解析しています。このファイルのフィールドの1つは、Unicode文字を頻繁に使用します。encodeを使用してファイルにUnicodeを書き込もうとしましたが失敗しました。

これまでのプロセスは基本的に次のとおりです。

  1. 名前を取得

    gamename = items.find('name')。string.strip()

  2. 次に、名前をリストに組み込み、後で文字列に変換します。

    stringtoprint = userid、gamename.encode('utf-8')#

    newstring = "INSERT INTO collections VALUES" + str(stringtoprint)+ ";" + "\ n"

次に、その文字列をファイルに書き込みます。

listofgamesowned.write(newstring.encode( "UTF-8"))

それほど頻繁に.encodeする必要はないようです。名前を解析して直接エンコードしようとしましたgamename = items.find('name').string.strip().encode('utf-8')が、うまくいかなかったようです。

現在-'UudetL\ xc3 \ xb6yt \ xc3 \ xb6retket'

UudetLöytöretketではなく、印刷および保存されています。

これが私が生成していた文字列である場合は、something.write(u'Uudet L\xc3\xb6yt\xc3\xb6retket');を使用するようです。ただし、これは文字列に埋め込まれた1つの要素です。

4

1 に答える 1

1

Unicodeは、文字列のメモリ内表現です。書き出すか読み込むときは、エンコードとデコードを行う必要があります。

Uudet L\xc3\xb6yt\xc3\xb6retketはのutf-8エンコードされたバージョンなUudet Löytöretketので、書きたいものです。ファイルから文字列を読み戻したい場合は、それをデコードする必要があります。

>>> print 'Uudet L\xc3\xb6yt\xc3\xb6retket'
Uudet Löytöretket
>>> print 'Uudet L\xc3\xb6yt\xc3\xb6retket'.decode('utf-8')
Uudet Löytöretket

出力する直前にエンコードし、読み返した直後にデコードすることを忘れないでください。

于 2013-01-20T19:03:10.607 に答える