natsuki on Nostr: ...
このコードは、メッセージを**目に見えない文字の列**に変換するためのものです。処理は2段階に分かれています。
**1. `s:utf8_bytes`:文字をUTF-8のバイト列に分解する**
`str2list(a:str, 1)` は、文字列を1文字ずつUnicodeの番号(コードポイント)のリストにします。続くif文は、その番号をUTF-8の規則に従って1〜4バイトに分けています。
- 0x7F以下(ASCII):そのまま1バイト
- 0x7FF以下:2バイト
- 0xFFFF以下(日本語の多く):3バイト
- それ以上(絵文字など):4バイト
1バイト目は先頭の目印(`0xc0`・`0xe0`・`0xf0`)に上位ビットを足した値です。2バイト目以降はどれも `0x80 +(6ビット分)` の形をしています。`/ 0x40` は「6ビット右にずらす」、`% 0x40` は「下位6ビットを取り出す」という意味です。
例として「あ」(U+3042)は `E3 81 82` の3バイトになります。
**2. `s:sexy_dumpling_encode`:各バイトを見えない文字に置き換える**
各バイトに `0xE00F0` を足して、`nr2char()` で文字に戻しています。通常の文字ではバイトが0x10以上になるので、変換先はU+E0100〜U+E01EFの範囲になります。ここは「異体字セレクタ」と呼ばれる領域で、画面には表示されません。`..=` は文字列の末尾に連結する演算子です。
たとえば「A」(0x41)はU+E0131に、「あ」は見えない3文字になります。結果は空に見える文字列ですが、中にはデータが入っています。元に戻すには、各文字から `0xE00F0` を引いてバイト列を復元し、UTF-8として読み直します。
なお、`s:` はこのスクリプト内だけで使える関数、`a:` は関数の引数、`abort` はエラーが起きた時点で関数を止める指定です。
Published at
2026-10-19 11:51:08 UTCEvent JSON
{
"id": "8864e90da980dc9c64c2c962ef3e4cbc3502f4e74061f874801b7dc17d9bb6a3",
"pubkey": "82b30d30444170e6a8c819e8406e362a3695454a4617894ce2706f3840c6c003",
"created_at": 1792410668,
"kind": 1,
"tags": [
[
"client",
"nostter",
"31990:83d52b4363d2d1bc5a098de7be67c120bfb7c0cee8efefd8eb6e42372af24689:1696997648659",
"wss://yabu.me/"
]
],
"content": "このコードは、メッセージを**目に見えない文字の列**に変換するためのものです。処理は2段階に分かれています。\n\n**1. `s:utf8_bytes`:文字をUTF-8のバイト列に分解する**\n\n`str2list(a:str, 1)` は、文字列を1文字ずつUnicodeの番号(コードポイント)のリストにします。続くif文は、その番号をUTF-8の規則に従って1〜4バイトに分けています。\n\n- 0x7F以下(ASCII):そのまま1バイト\n- 0x7FF以下:2バイト\n- 0xFFFF以下(日本語の多く):3バイト\n- それ以上(絵文字など):4バイト\n\n1バイト目は先頭の目印(`0xc0`・`0xe0`・`0xf0`)に上位ビットを足した値です。2バイト目以降はどれも `0x80 +(6ビット分)` の形をしています。`/ 0x40` は「6ビット右にずらす」、`% 0x40` は「下位6ビットを取り出す」という意味です。\n\n例として「あ」(U+3042)は `E3 81 82` の3バイトになります。\n\n**2. `s:sexy_dumpling_encode`:各バイトを見えない文字に置き換える**\n\n各バイトに `0xE00F0` を足して、`nr2char()` で文字に戻しています。通常の文字ではバイトが0x10以上になるので、変換先はU+E0100〜U+E01EFの範囲になります。ここは「異体字セレクタ」と呼ばれる領域で、画面には表示されません。`..=` は文字列の末尾に連結する演算子です。\n\nたとえば「A」(0x41)はU+E0131に、「あ」は見えない3文字になります。結果は空に見える文字列ですが、中にはデータが入っています。元に戻すには、各文字から `0xE00F0` を引いてバイト列を復元し、UTF-8として読み直します。\n\nなお、`s:` はこのスクリプト内だけで使える関数、`a:` は関数の引数、`abort` はエラーが起きた時点で関数を止める指定です。",
"sig": "3f5f15464aa247a3874cf506f99ddf522c091fa5164a9fea4dea0cf4a7700b1ee28d695728de652cc71d98198a98f7c7ca5f470f1a27c65315fbd633584ccf97"
}