wono on Nostr: /run py def decode_secret_emoji(text: str) -> str: """Decode Secret Emoji to text""" ...
/run py
def decode_secret_emoji(text: str) -> str:
"""Decode Secret Emoji to text"""
VS_START, VS_END = 0xfe00, 0xfe0f # VS1〜VS16の範囲
VS_SUPP_START, VS_SUPP_END = 0xe0100, 0xe01ef # VS17〜VS256の範囲
decoded = []
i = 0
while i < len(text):
cp = ord(text[i])
# PythonがUTF-16内部表現を使う環境ではサロゲートペアが発生する場合がある。
# 上位サロゲート(0xD800〜0xDBFF)を検出したら、
# 次の下位サロゲート(0xDC00〜0xDFFF)と組み合わせて本来のコードポイントを復元する
if 0xD800 <= cp <= 0xDBFF and i + 1 < len(text):
low = ord(text[i + 1])
if 0xDC00 <= low <= 0xDFFF:
cp = 0x10000 + ((cp - 0xD800) << 10) + (low - 0xDC00)
i += 2
else:
i += 1
continue
else:
i += 1
# コードポイントがVSの範囲内であれば、エンコード時の逆算でバイト値を復元する
if VS_START <= cp <= VS_END:
decoded.append(cp - VS_START) # VS1〜VS16 → 0x00〜0x0F
elif VS_SUPP_START <= cp <= VS_SUPP_END:
decoded.append(cp - VS_SUPP_START + 16) # VS17〜VS256 → 0x10〜0xFF
# VS以外の文字(絵文字など)は無視する
# 復元したバイト列をUTF-8としてデコードして文字列に戻す
return bytes(decoded).decode('utf-8', errors='replace')
print(decode_secret_emoji("🥟󠇓󠅱󠅺"))
Published at
2026-05-18 01:12:31 UTCEvent JSON
{
"id": "53976db446db16827e3df4e9789f9ee985affae53a583773f6f612dad2a599ce",
"pubkey": "6f849dc7387f4dc991af2360b5cbe61e9fc96170a096fa577c1b9177ca5882f5",
"created_at": 1779066751,
"kind": 1,
"tags": [
[
"client",
"Nostr Live Canvas",
"31990:73491509b8e2d80840873b5a13ba98a5d1ac3a16c9292e106b1f2eda31152c52:nostr-live-canvas",
"wss://relay.nostr.nisshiee.org"
]
],
"content": "/run py\ndef decode_secret_emoji(text: str) -\u003e str:\n \"\"\"Decode Secret Emoji to text\"\"\"\n VS_START, VS_END = 0xfe00, 0xfe0f # VS1〜VS16の範囲\n VS_SUPP_START, VS_SUPP_END = 0xe0100, 0xe01ef # VS17〜VS256の範囲\n\n decoded = []\n i = 0\n\n while i \u003c len(text):\n cp = ord(text[i])\n\n # PythonがUTF-16内部表現を使う環境ではサロゲートペアが発生する場合がある。\n # 上位サロゲート(0xD800〜0xDBFF)を検出したら、\n # 次の下位サロゲート(0xDC00〜0xDFFF)と組み合わせて本来のコードポイントを復元する\n if 0xD800 \u003c= cp \u003c= 0xDBFF and i + 1 \u003c len(text):\n low = ord(text[i + 1])\n if 0xDC00 \u003c= low \u003c= 0xDFFF:\n cp = 0x10000 + ((cp - 0xD800) \u003c\u003c 10) + (low - 0xDC00)\n i += 2\n else:\n i += 1\n continue\n else:\n i += 1\n\n # コードポイントがVSの範囲内であれば、エンコード時の逆算でバイト値を復元する\n if VS_START \u003c= cp \u003c= VS_END:\n decoded.append(cp - VS_START) # VS1〜VS16 → 0x00〜0x0F\n elif VS_SUPP_START \u003c= cp \u003c= VS_SUPP_END:\n decoded.append(cp - VS_SUPP_START + 16) # VS17〜VS256 → 0x10〜0xFF\n # VS以外の文字(絵文字など)は無視する\n\n # 復元したバイト列をUTF-8としてデコードして文字列に戻す\n return bytes(decoded).decode('utf-8', errors='replace')\n\nprint(decode_secret_emoji(\"🥟󠇓󠅱󠅺\"))",
"sig": "659813d62a786e6645ab66a957542cae2f5cfd410a95ebbddf6dda5afb0033b32237c86d75e95608d681a2a0629e3a0c23fad38d63d83b375798ce6eaa421e5f"
}