web-dev-qa-db-ja.com

Python latin1をUTF8に変換する

Python 2.7では、latin1文字列をUTF-8に変換するにはどうすればよいですか。

たとえば、éをutf-8に変換しようとしています。

>>> "é"
'\xe9'
>>> u"é"
u'\xe9'
>>> u"é".encode('utf-8')
'\xc3\xa9'
>>> print u"é".encode('utf-8')
é

文字はéで、これはラテン語のアキュート付きの小さな文字E(U + 00E9)です。UTF-8バイトエンコーディングは次のとおりです。c3a9
ラテンバイトのエンコーディングは次のとおりです:e9

ラテン文字列のUTF-8エンコードバージョンを取得するにはどうすればよいですか?誰かがéを変換する方法の例を挙げてもらえますか?

12
Eugene

ラテン1からUnicodeへのバイトシーケンスをデコードするには、 .decode()メソッド を使用します。

>>> '\xe9'.decode('latin1')
u'\xe9'

Pythonは、\xabより下のUnicodeコードポイントに\u00ffエスケープを使用します。

>>> '\xe9'.decode('latin1') == u'\u00e9'
True

上記のLatin-1文字は、次のようにUTF-8にエンコードできます。

>>> '\xe9'.decode('latin1').encode('utf8')
'\xc3\xa9'
9
Martijn Pieters
>>> u"é".encode('utf-8')
'\xc3\xa9'

UTF-8でエンコードされたバイトシーケンスがあります。エンコードされたバイトを直接印刷しようとしないでください。それらを印刷するには、エンコードされたバイトをデコードしてUnicode文字列に戻す必要があります。

>>> u"é".encode('utf-8').decode('utf-8')
u'\xe9'
>>> print u"é".encode('utf-8').decode('utf-8')
é

エンコードとデコードは、効果的にキャンセルされる反対の操作であることに注意してください。 Pythonは、同等のu"é"として出力しますが、最終的には元のu'\xe9'文字列に戻ります。

>>> u"é" == u'\xe9'
True
3
John Kugelman

コンセプト= concept.encode( 'ascii'、 'ignore')コンセプト= MySQLdb.escape_string(concept.decode( 'latin1')。encode( 'utf8')。rstrip())

私はこれを行います、それが良いアプローチであるかどうかはわかりませんが、それは毎回機能します!!

0