【Python】Unicodeのひらがなブロックを詳しく見てみよう

に公開

概要

Unicodeでは日本語の「ひらがな」が特定のブロックにまとめられています。
本記事では、Unicodeの**ひらがなブロック(Hiragana Block)**について詳しく見ていきます。

🧩 Unicodeのひらがなブロックとは?

  • ブロック名:Hiragana(ひらがな)
  • 範囲U+3040U+309F
  • 文字数:96文字(未使用コードポイントも含む)
  • 導入:Unicode 1.0から存在

この範囲には、日本語で使用される基本的なひらがなや、音を変化させる記号などが含まれています。

🔢 主な文字とコードポイント

文字 読み Unicode
a U+3042
i U+3044
u U+3046
e U+3048
o U+304A
n U+3093
濁点 U+309B
半濁点 U+309C
繰り返し記号 U+309D

🏗 ブロックの構成

ひらがなブロックは以下のような文字で構成されています:

  • 基本50音(あ〜ん)
  • 小書き文字(ぁぃぅぇぉ など)
  • 濁点・半濁点(゛゜)
  • 繰り返し記号(ゝゞ)
  • 歴史的仮名(ゐ・ゑ)
  • 濁点付き「う」(ゔ)

歴史的仮名について

  • ゐ(U+3090)
  • ゑ(U+3091)

これらは現代日本語では使われませんが、歴史的文書や古典文学で登場します。

外来語表記で使う「ゔ」

  • ゔ(U+3094)
    濁点付きの「う」で、「ヴァイオリン」などの外来語表記で使用されます。

🔎 関連するUnicodeブロック

ひらがな以外にも、日本語関連の文字は複数のブロックにまたがって定義されています:

ブロック名 範囲 用途
Katakana U+30A0〜U+30FF カタカナ
Katakana Phonetic Extensions U+31F0〜U+31FF アイヌ語用カタカナなど
Kana Supplement U+1B000〜U+1B0FF 変体仮名(歴史的仮名)

🧪 実際に使うときの注意点

  • フォントによっては歴史的仮名が表示されないことがある
  • Unicode正規化によって文字の比較や変換に差異が出る場合がある(特に濁点/半濁点の組み合わせ)

🐍 これらの文字を表示させるコード

import unicodedata

# 各カテゴリのリストを作成
list_hiragana = []

# Unicodeの範囲を網羅
for codepoint in range(0x3040, 0x309F + 1):  # ひらがなの範囲のみを指定
    try:
        char = chr(codepoint)
        if unicodedata.category(char) not in ["Cn", "Cs"]:  # 表示可能な文字のみ
            list_hiragana.append(char)
    except Exception:
        # 無効なコードポイントをスキップ
        continue

# 各リストを指定したパスのファイルに出力する関数
def write_to_file(filepath, data):
    with open(filepath, 'w', encoding='utf-8') as f:
        f.write('\n'.join(data))

# ひらがなリストをファイルに出力
write_to_file('./output_hiragana.txt', list_hiragana)  # 出力先を一般化

# 各リストの内容を確認
print("ひらがな:", list_hiragana)

💻 実行例

(.venv) $ python surrogate_pair.py 
ひらがな: ['ぁ', 'あ', 'ぃ', 'い', 'ぅ', 'う', 'ぇ', 'え', 'ぉ', 'お', 'か', 'が', 'き', 'ぎ', 'く', 'ぐ', 'け', 'げ', 'こ', 'ご', 'さ', 'ざ', 'し', 'じ', 'す', 'ず', 'せ', 'ぜ', 'そ', 'ぞ', 'た', 'だ', 'ち', 'ぢ', 'っ', 'つ', 'づ', 'て', 'で', 'と', 'ど', 'な', 'に', 'ぬ', 'ね', 'の', 'は', 'ば', 'ぱ', 'ひ', 'び', 'ぴ', 'ふ', 'ぶ', 'ぷ', 'へ', 'べ', 'ぺ', 'ほ', 'ぼ', 'ぽ', 'ま', 'み', 'む', 'め', 'も', 'ゃ', 'や', 'ゅ', 'ゆ', 'ょ', 'よ', 'ら', 'り', 'る', 'れ', 'ろ', 'ゎ', 'わ', 'ゐ', 'ゑ', 'を', 'ん', 'ゔ', 'ゕ', 'ゖ', '゙', '゚', '゛', '゜', 'ゝ', 'ゞ', 'ゟ']
(.venv) $ 

💡 疑問:みたことのないひらがながあるけど・・・?

  • Unicode的には「ひらがなブロック(U+3040〜U+309F)」に含まれ、名前にも"HIRAGANA"がついているため、技術的には「ひらがな」として扱われているため、表示される。

📚 まとめ

・Unicodeの「ひらがなブロック」は、日本語をプログラムで扱ううえで非常に基本的で重要な領域です。日本語処理や文字コードに関心がある方は、一度このブロックの中身をじっくり眺めてみると、新しい発見があるかもしれません。

・カタカナ、漢字verは以下で紹介しています。
https://zenn.dev/qa_dev/scraps/7ce46c4702434b


Zennでは日本語処理に関する記事もいくつか見かけます。
この記事がUnicodeの扱いに役立てば幸いです 🙌

Discussion