本文に移動
FancyUnicodeFancyUnicode
ホームジェネレーター記号テキスト整形組み合わせよくある質問Instagram用の文字Discord用の文字TikTok用の文字
ツール
ホーム文字スタイル一覧太字テキストUnicode変換ジェネレーター記号テキスト整形Instagram用の文字Discord用の文字TikTok用の文字
ジェネレーターを開く
ホーム / Unicodeツール

Unicodeガイド · 2026年10月20日更新

PythonでUnicodeを扱う

処理中の文字列はstrのまま扱います。保存や通信ではbytesにエンコードし、既知の文字コードでデコードします。以下の例をPython 3で実行してください。

ord()とchr()でコードポイントを調べる

Python 3のstrはUnicode文字列です。ord()は1つのコードポイントを整数にし、chr()は逆の処理をします。見た目が1つの絵文字でも複数のコードポイントを含む場合があります。

text = "Aé♥"
print([f"U+{ord(char):04X}" for char in text])
# ['U+0041', 'U+00E9', 'U+2665']
print(chr(0x2665))
# ♥

UTF-8で文字列をエンコード・デコードする

encode()で文字列をバイト列に、decode()でバイト列を文字列に変換します。元データの実際の文字コードを使ってください。不正な入力は標準でエラーになります。

text = "café"
data = text.encode("utf-8")
print(data.hex(" "))
# 63 61 66 c3 a9
print(data.decode("utf-8"))
# café
assert data.decode("utf-8") == text

エスケープ表記と文字そのものを区別する

通常のPython文字列リテラルではUnicodeエスケープが解釈されます。raw文字列はバックスラッシュを保持します。表示にエスケープがあっても、保存した文字列にバックスラッシュがあるとは限りません。

heart = "\u2665"
literal = r"\u2665"
print(heart, len(heart))
# ♥ 1
print(literal, len(literal))
# \u2665 6
assert heart == "♥"

比較前に同等の文字列を正規化する

合成済み文字と文字+結合記号は同じ見た目になる場合があります。NFCは正準等価な文字列をそろえます。翻訳やアクセントの削除はしません。

import unicodedata

composed = "é"
decomposed = "e\u0301"
print(composed == decomposed)
# False
print(unicodedata.normalize("NFC", decomposed) == composed)
# True

よくある文字コードの間違いを避ける

  • UTF-8ファイルにはencoding="utf-8"を指定し、古い文書の元の文字コードも確認してください。
  • errors="ignore"を一般的な修復方法にしないでください。データが黙って消えます。エラーは明示的に処理します。
  • len()はstrのコードポイント数を数え、見た目の文字数ではありません。結合記号や絵文字は複数を含みます。
  • ASCIIはすべてのUnicodeを符号化できません。置換や翻字をすると内容が変わります。

ブラウザーで文字を調べる

  • コードポイントとUTF-8バイト列を調べる
  • UnicodeとASCIIを比較する
  • 対応する不可視Unicode文字を表示

参考資料

  • Python公式Unicodeガイド
  • unicodedataのドキュメント

製品

ホームジェネレーターUnicode文字ジェネレーターUnicode変換Unicodeテキスト生成Instagramプロフィール用の文字Discord表示名用の文字TikTokキャプション用の文字記号テキスト整形よくある質問

運営情報

このサイトについてプライバシー利用規約お問い合わせ

Unicodeスタイルでテキストをもっと表情豊かに。

© 2026 FancyUnicode