Python で Unicode を ASCII に変換する

Salman Mehmood 2024年2月15日
Python で Unicode を ASCII に変換する

この記事では、Unicode をバイトにエンコードする方法を学び、システムをエンコードするさまざまな方法を見て、Python で Unicode を ASCII に変換します。

Python で Unicode を ASCII に変換する

Python 3 文字列の基本的な問題は文字で構成されています。 Python には文字型はありませんが、Unicode 文字が含まれています。

a = 'abcd' と言って、len() 関数を使用してその長さを確認すると、4 が得られ、また、こんにちはを意味する s='שלום' を宣言します。 ヘブライ語。 両方の変数が 4 文字であるため、これらの長さは同じになります。

>>a='abcd'
>>len(a)
4
>>s='שלום'
>>len(s)
4

舞台裏でバイト数が異なるという事実は、ここでのこの質問とは無関係です。len() はバイト数ではなく文字数を測定していますが、もちろん舞台裏では UTF-8 Unicode 文字と UTF-8 エンコーディングはより多くのバイトを使用しています。

次に、文字列を必要なバイトに変換するにはどうすればよいでしょうか? s.encode() を使用できます。これを行うと、ヘブライ語で שלום という単語を作成するために必要な 8 バイトのバイト文字列が返されます。

>>s.encode()
b'\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d'
>>'abcd'.encode()
b'abcd'

ここで、Unicode 文字列を取得してそれをバイト文字列に変換しますが、それよりもさらに複雑です。なぜなら、この文字列が何であるかを知っているからです。 異なるエンコーディング システムの基礎となるバイトを取得したいと考えています。

たとえば、iso-8859-8を使用します。これは、西ヨーロッパで多く使用されていると聞いたことがあるかもしれないエンコーディングの一種であり、1 バイトに必要なすべての異なる文字を含む 1 バイトを持つことができました。 そのため、文字列を取得して Unicode ではないエンコーディングに変換する必要がある場合。

>>s.encode('iso-8859-8')
b'\xf9\xec\xe5\xed'

s='北京' と言うように、別の言語の何かがあるとどうなるか見てみましょう。それをエンコードすると、バイト文字列が返されます。

これらの漢字はそれぞれ 3 バイトで表されるため、ここでは 6 バイトが返されていることがわかります。 これは、UTF-8 で行われる可変長エンコーディングです。

>>s='北京'
>>s.encode()
b'\xe5\x8c\x97\xe4\xba\xac'

次に、iso-8859-8 を使用して 北京 をエンコードします。これを実行すると、UnicodeEncodeError が返されます。これは、これらの Unicode 文字を取得して、それらを 許可されていない iso-8859-8 エンコーディングのバイト。

s.encode("iso-8859-8")

UnicodeEncodeError

これに英語の単語を結合すると、エラーが発生する可能性がある場所でも失敗するため、失敗しますが、エラーを無視するのに役立つパラメーターを追加できます。

>>s='I often go to 北京'
>>s.encode('iso-8859-8',errors='ignore')
b'I often go to '

大量のテキストがあり、Unicode 文字が失われても問題ない場合は、これを使用できます。

デフォルトで strict に等しい help(s.encode) を見てみましょう。しかし、それはいくつかの異なるものである可能性があるため、replace 値を errors に使用すると、そうではありません。 置換方法を本当に知っているので、疑問符を使用します。

help(s.encode)

エンコードに関するヘルプ

>>s='I often go to 北京'
>>s.encode('iso-8859-8',errors='replace')
b'I often go to ??'

xmlcharrefreplace を使用すると、これらの Unicode 文字に関係する XML エンティティが返されるため、これを XML ドキュメントまたは HTML に貼り付ける場合、これは機能します。

>>s.encode('iso-8859-8',errors='xmlcharrefreplace')
b'I often go to 北京'

必要に応じて異なります。 Unicode 文字をバイトに変換する場合は、ネットワーク経由で送信するか、他の種類のエンコーディング システムを扱っているため、これは一般的です。

あなたが初心者で詳細に立ち入りたくない場合は、次のコマンドを使用して unidecode という Python パッケージをインストールしてください。

Unicode を ASCII に直接変換します。 Unicode を ASCII に変換する必要があるアプリケーションで作業する場合に役立ちます。

from unidecode import unidecode

unidecode(u"北京")
# Output: 'Bei Jing'
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Python Unicode