【Python】文字列をユニコードエスケープ形式に変換する方法

日本語などのマルチバイト文字を、\uXXXX という形式の「ユニコードエスケープシーケンス」のみで構成されたASCII文字列に変換したい場合があります。 これは、ASCII文字しか扱えない古いシステムへのデータ送信や、設定ファイルでの文字化け防止などに利用されます。

Pythonでこれを行うには、組み込み関数の ascii() を使う方法と、文字列メソッドの .encode("unicode-escape") を使う方法の2通りがあります。

目次

1. ascii() 関数を使う方法

ascii() 関数は、オブジェクトの「ASCII文字のみで表現可能な文字列表現(repr)」を返します。非ASCII文字は自動的に \u 形式にエスケープされます。

実装例

# 変換したい日本語文字列
original_text = "富士山"

# ascii() 関数で変換
# 戻り値は文字列(str)型ですが、前後に引用符(')が付きます
escaped_text = ascii(original_text)

print(f"元の文字列  : {original_text}")
print(f"変換後      : {escaped_text}")
print(f"変換後の型  : {type(escaped_text)}")

実行結果

元の文字列  : 富士山
変換後      : '\u5bcc\u58eb\u5c71'
変換後の型  : <class 'str'>

ascii() の結果には、必ず前後にシングルクォート ' が付与される点に注意してください。

2. encode(“unicode-escape”) を使う方法

より実用的なデータ処理として、引用符なしの純粋なエスケープ文字列を得たい場合は、.encode() メソッドを使用します。

実装例

original_text = "富士山"

# 1. unicode-escape コーデックでエンコード
# これにより bytes型(バイト列)になります
escaped_bytes = original_text.encode("unicode-escape")

print(f"バイト列    : {escaped_bytes}")

# 2. 必要に応じて文字列(str)型にデコード
# バイト列を通常の文字列として扱いたい場合
escaped_str = escaped_bytes.decode("utf-8")

print(f"文字列化    : {escaped_str}")

実行結果

バイト列    : b'\\u5bcc\\u58eb\\u5c71'
文字列化    : \u5bcc\u58eb\u5c71

解説

使い分け

  • ascii(obj): デバッグログへの出力など、「中身がどんな文字コードかとりあえず確認したい」という簡易的な用途に向いています。
  • .encode("unicode-escape"): ファイルへの保存や通信プロトコルでの利用など、「データとして正確に変換したい(引用符などが不要)」というシステム開発の用途に向いています。

逆変換(デコード)

ユニコードエスケープされた文字列(例: \u5bcc\u58eb\u5c71)を元の日本語に戻したい場合は、以下のように unicode-escape でデコードします。

s = r"\u5bcc\u58eb\u5c71" # 生の文字列として定義
print(s.encode().decode("unicode-escape")) # -> 富士山
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次