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 03:10:57 CESTEvent JSON
{
"id": "f93f585f0b3392e5bbf3f480279caf87711ca62d93790f3cb115d0480cdb572a",
"pubkey": "6f849dc7387f4dc991af2360b5cbe61e9fc96170a096fa577c1b9177ca5882f5",
"created_at": 1779066657,
"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": "269b96c6e99b0b55d42f1180479f5bed3ad136049e79dd6823147ae4bea298a5dfdb4dd28bf1940d1a83bdc0c3c3331beb7a39ccd5a06d856e9e44784d49b1f9"
}