Python で Unicode 文字を ASCII 文字列に変換する

Python で Unicode 文字を ASCII 文字列に変換する

Unicode 文字は、すべての言語の文字のグローバルエンコーディング標準です。1 文字あたり 1 バイトしかサポートしない ASCII とは異なり、Unicode 文字はこの機能を 4 バイトに拡張し、どの言語でもより多くの文字をサポートできるようにします。

このチュートリアルでは、Unicode 文字を ASCII 文字列に変換する方法を示します。目標は、ASCII でサポートされていない文字を削除するか、Unicode 文字を対応する ASCII 文字に置き換えることです。

Python で unicodedata.normalize()encode() を使用して Unicode を ASCII 文字列に変換する

Python モジュール unicodedata は、Unicode の文字データベースと、これらの文字へのアクセス、フィルタリング、および検索を大幅に容易にするユーティリティ関数を利用する方法を提供します。

unicodedata には、Unicode 文字列の正規化された形式と指定された文字列の 2つのパラメータを受け入れる normalize() と呼ばれる関数があります。

正規化された Unicode 形式には、NFCNFKCNFD、および NFKD の 4 種類があります。これについてさらに学ぶために、公式ドキュメントは、各タイプの徹底的かつ詳細な説明のためにすぐに利用できます。NFKD 正規化された形式は、このチュートリアル全体で使用されます。

複数の Unicode 文字で文字列を宣言しましょう。

import unicodedata

stringVal = u"Här är ett exempel på en svensk mening att ge dig."

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore"))

normalize() メソッドを呼び出した後、関数 encode() への呼び出しをチェーンします。この関数は、Unicode から ASCII への変換を行います。

文字列値の前の u 文字は、Python が文字列値に Unicode 文字が含まれていることを認識するのに役立ちます。これは型安全の目的で行われます。

最初のパラメーターは変換タイプを指定し、2 番目のパラメーターは文字を変換できない場合に何をすべきかを強制します。この場合、2 番目のパラメーターは ignore を渡します。これは、変換できない文字をすべて無視します。

出力:

b'Har ar ett exempel pa en svensk mening att ge dig.'

元の文字列(äおよびå)の Unicode 文字が、対応する ASCII 文字(a)に置き換えられていることに注意してください。

文字列の先頭にある b 記号は、encode() 関数が文字列で使用されているため、文字列がバイトリテラルであることを示します。文字列をカプセル化する記号と一重引用符を削除するには、encode() を呼び出した後に関数 decode() をチェーン呼び出しして、文字列リテラルに再変換します。

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())

出力:

Har ar ett exempel pa en svensk mening att ge dig.

encode() 関数の 2 番目のパラメーターとして replace を使用して別の例を試してみましょう。

この例では、対応する ASCII 文字を持たない文字列を試してみましょう。

import unicodedata

stringVal = u"áæãåāœčćęßßßわた"

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "replace").decode())

このサンプル文字列内のすべての文字は ASCII で登録されていませんが、対応する記号が付いている場合があります。

出力:

a??a?a?a??c?c?e??????

replace パラメータは、ASCII 対応のない文字を疑問符 ? で完全に置き換えます。シンボル。同じ文字列で ignore を使用する場合:

print(unicodedata.normalize("NFKD", stringVal).encode("ascii", "ignore").decode())

出力は次のようになります。

aaaacce

要約すると、Unicode 文字を ASCII 文字に変換するには、unicodedata モジュールの normalize() 関数と、文字列用の組み込みの encode() 関数を使用します。ASCII 文字を持たない Unicode 文字を ignore または replace することができます。ignore オプションは文字を削除し、replace オプションはそれを疑問符に置き換えます。

チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

関連記事 - Python Unicode

関連記事 - Python String