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

Rayven Esplanada 2021年11月20日
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 オプションはそれを疑問符に置き換えます。

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