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 形式には、NFC
、NFKC
、NFD
、および 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
オプションはそれを疑問符に置き換えます。
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