Python 数値を丸数字に変換

Python 「①」などの丸数字を「②」「③」と値を増やして割り振る

実務上でこのようなことを実現したいことが出てくるかもしれません。

maru_moji = "①"
# ①を文字コードに変換[bytes型]
maru_date = maru_moji.encode("UTF8")
# ①を文字コードに変換[int型]
maru_code = int.from_bytes(maru_date, 'big')

for i in range(0, 10):
    # 文字コードのインクリメント
    maru_code += 1
    # 文字コードを文字に変換
    val = maru_code.to_bytes(4, "big").decode("UTF8")
    print(val, end=" ")
# ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪

※各処理の解説は後述

Python 数値を丸数字に変換する処理

def get_marumoji(val):
    # ①を文字コードに変換[bytes型]
    maru_date = "①".encode("UTF8")
    # ①を文字コードに変換[int型]
    maru_code = int.from_bytes(maru_date, 'big')
    # 文字コードの変換
    maru_code += val - 1
    # 文字コードを文字に変換して返却
    return maru_code.to_bytes(4, "big").decode("UTF8")

上記で作成した関数のコール結果

print(get_marumoji(1))
# ①

print(get_marumoji(2))
# ②

print(get_marumoji(5))
# ⑤

print(get_marumoji(20))
# ⑳

実現方法の考え方

文字コードは「①」の次は「②」その次は「③」と順番に並んでいます。

文字コードの種類によりますが「UTF8」ではそのようになっています。

先頭である文字「①」の文字コードを取得し、そのコードの値を操作することにより欲しいデータを取得しています。

例えば「③」が欲しい場合、「①」の文字コードはUTF8で「0xE291A0」ですので「0xE291A2」が示す文字を取得します。

これら文字から文字コードへの変換、またはその逆もpythonが用意してくれている関数を使用すれば可能ですので、対応文字コードを調べる必要はありません。

問題点

UTF8では「⑳」までしか用意されていない為、それ以上は変換できません。

実際に使用する場合はこの点を注意して使用してください。

他の文字コードにすれば可能かもしれませんが、そこまで調査していません。