◆結論

ブラウザ開いてF12押してConsoleのタブ開いて

console.log(escape("ちんこ").replaceAll("%", "\\"));

したら

\u3061\u3093\u3053

って表示されるね。よかったね。

◆\uxxxxってなに

Unicodeエスケープされた文字です。

RFC5137

RFCは定義されてるけど、どんなシステムでも使えるよって代物ではない。が、とりあえずWebブラウザくんはこのUnicodeエスケープされた形式を理解してくれる。

証拠を出せだと?疑い深いやつだなお前は。じゃあF12押してConsoleに

console.log("\u3061\u3093\u3053")

って入れてEnterしてみろよ。多分ちんこが顔を出すから。

Webブラウザのみならず、バックスラッシュがエスケープのキーワードである処理系なら通じたりする。JavaやらC#やら。

あと、JSONのRFCに「Unicodeエスケープ対応してね」って定義されてるから、どんな処理系であってもJSONを扱う以上は対応してくれる。もちろんJavaScriptのObject内のフィールドでも使用できる。

const x = {
   "昔のあだ名": "\u3061\u3093\u3053"
 };
console.log(x);

Consoleにぶち込んだら、ちんこになったでしょ?

◆なんでエスケープすんの

◆escapeは微妙に非推奨

escape | MDN

だからまぁ、下のようにすればいいのかも。

console.log("ちんこ😂".split("").map((c) => `\\u${c.charCodeAt(0).toString(16).padStart(4, "0")}`).join(""));

ノリで書いたコードだから、ノリで動かないかも。

  • splitでちんこを1文字ずつに輪切りして
  • 1文字を文字コード数値にして
  • 数値を16進数文字列にして
  • 4文字になるようにゼロパディングして
  • 空文字でがっちゃんこ

escape使えって話だが。

適当に書いた割にはサロゲートペアもいけてるっぽい。split的には2文字扱いなんだな。

"😀".split("")

したら

Array [ "\ud83d", "\ude00" ]

になった。

◆EmojiとLINEのバグ

※この章っていうかサロゲートペアの話はいずれ別記事として取り出すかも。

関係ない話になるけど、例えばLINEのアカウント名に「🦸‍♂️」って文字を設定して暫く経つと、いつの間にか「🦸‍♀️♂」って表示に化けたりすんのね。そのバグの理由を手元で垣間見ることができる。

"🦸‍♂️".split("")

すると

(5) ["\ud83e", "\uddb8", "‍", "♂", "️"]

になる。試しに

console.log("\ud83e\uddb8")

すると「🦸‍♀️」が出てきますわな。

「🦸‍♂️」を変換くんに食わすと

\ud83e\uddb8\u200d\u2642\ufe0f

っていう文字列がもらえる。

「\u200d」は「ZWJ(ゼロ幅接合子)」っちゅう特別な文字でして、「前後の文字を合体させたらなアカンで」を表現しておりまんがな。

例えば男と男がキスしてるホモ字「👨‍❤️‍💋‍👨」を分解すると「\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68」になる。そっから「\u200d」を消してconsole.logすると「👨❤️💋👨」になるんだな。

♂の後ろについてる「\ufe0f」は異体字セレクタってものです。もともとは(略

性別切り替えるだけで成り立つ絵文字が多かったから、コードポイント資源節約のために異体字セレクタで何とかしようって話になったんですね。多分。

そういうことで「🦸‍♀️♂」はZWJで合体して🦸‍♂️にせねばならんのだが、表示が悪いか保存が悪いかでLINEはバグってるわけ。表示が悪いんならすぐ直せるだろうけど、保存だったら割と面倒なことになりそうっすね。そういう意味でもUnicode Escapeでデータをやり取りしたり保存したりってのが合理的な場面もある。

ほいで、例えばLINEの名前の文字数制限は20文字なんだけど👨‍👨‍👦‍👦は1文字で4文字に分割されちゃうはずで、すげぇパワーを秘めてるわけだから「👨‍👨‍👦‍👦👨‍👨‍👦‍👦👨‍👨‍👦‍👦👨‍👨‍👦‍👦👨‍👨‍👦‍👦👨‍👨‍👦‍👦👨‍👨‍👦‍👦👨‍👨‍👦‍👦👨‍👨‍👦‍👦」とかいう名前で登録すると…

エラーで登録できなかったわ。iPhone版は少なくともダメだったな。Win版は「👨‍👨‍👦‍👦」1文字で11文字分カウント増えた。これは(サロゲートペアである)Emojiひとつで2文字分*4人、それとZWJ*3で11だからだろうね。

そういうわけで、画面に表示されている1文字が1文字であるのか?っていう話は時に難しかったりもする。黒人「🧑🏿」はZWJを使っていないが、「🧑」と「🏿」の合体技である。「🏿」はfont-familyメイリオ優先だしフォールバックも考えてないからおそらく豆腐になっちゃってるけど。豆腐といえばNotoっていう(略

話を戻すと、これはemoji modifierっていう異体字セレクタ的な文字で、ZWJとはまた違うリガチャ(略

もっと詳しく言うとUnicodeの基本多言語面(略

つまり、文字列を格納している変数「s」の文字数を測りたいときは「[…s].length」ってすりゃいい場合がある。spreadしろ。でも「[…”👨‍👨‍👦‍👦”].length」は7文字ってカウントされるね。だから、文字に含まれているZWJの数を検出して引き算すれば?あ、でも「[…”🧑🏿”].length」は2文字ってカウントされるうえにZWJ使ってないから(略

つまり

[...new Intl.Segmenter("en", {granularity: "grapheme"}).segment("👨‍👨‍👦‍👦👨‍❤️‍💋‍👨🧑🏿")].length

によって「3文字」ってのが判別できるんすね。ただし、2021年6月現在でintl segmenterはproposal段階だから、どこでも使えるとは思わないほうがいい。

あと、Microsoft限定の絵文字である「Ninja Cat」は「🐱‍👤」なんだけど、「\ud83d\udc31\u200d\ud83d\udc64」、つまり「🐱👤」をZWJで合体させたものになる。Microsoftじゃない端末だと合体を解釈できないから「🐱👤」って表示されますね。

あとあとあと、Well-formed JSON.stringifyっていう話が(略

◆FirefoxってConsoleへのペースト防いでんだね

Scam Warning: Take care when pasting things you don’t understand. This could allow attackers to steal your identity or take control of your computer. Please type ‘allow pasting’ below (no need to press enter) to allow pasting.

重大な警告: 自分で理解していないものを貼り付けるときは、よく注意してください。あなたの認証情報が傍受されたり、コンピューターが乗っ取られる可能性があります。貼り付けを許可するには、以下に ‘allow pasting’ と入力してください。Enter キーは不要です。

へー。いつから?

HTTP Onlyなら認証情報は抜かれないような気がするけど、そうしてないサイトもそれなりにあるんかね。まぁCookie触れないにせよ危険ではある。

過去にはデベロッパーツール開いたときにコンソールに「貼り付けないでね」みたいな警告が出るサイトはあったな。AAが出たりするサイトもあった。どこかは忘れたけど。

allow pastingを元に戻すのは以下の手順。

  • アドレスバーに「about:config」ってぶち込んでEnter
  • あぶねぇよと言われるけどOKする
  • 検索窓に「selfxss」って入力し、「devtools.selfxss.count」の値を0とかにする。

◆結

Netflixに加入して見たやつ。アニメを攻めようと思った。

  • 梨泰院クラス(実写韓流ドラマ)
    • 勧められて見た。みろと言われたので加入した。
    • 一話は泣いたけど、ラブロマンスになってきてアレだった。
    • 商売ごとの詰めも甘い。
  • はたらく細胞
    • 3話までみたけど、面白くはない。みるのやめた。
    • 女が作ってる感じした。
    • 鬼灯の冷徹を見て面白くなかった感じと似ていた。
    • 聖☆おにいさんは漫画が面白かった記憶あるけど、アニメはどうなんだろ。同じ雰囲気あったような気がした。
  • タイガー&バニー
    • 面白かったよ。嫌味な感じがなくて王道でよかった。
    • 後半で若干腐女子に媚びた感じなかった?
    • 劇場版がNetflixになかったんで困る。どこで見れば?
    • 続編の企画があるらしいね。なんでサイトがHTTPSじゃないの?
  • ジャイアント ロボ THE ANIMATION 地球が静止する日
    • 普通くらいに面白かった。金がかかってるよな。俺の生まれたくらいでこのアニメを作ってたのはすごいわ。
    • 遺言おかしいだろ。と思ってググったらみんな同じこと考えててワロタ。
    • 草間大作少年が困ったちゃんではあるが、少年だし。
    • 十傑集走りがみられて良かった。
  • マイリトルポニー
    • とても面白い。有名なだけはある。
    • ただ、外人兄貴がこれでシコってるってのは理解できな…理解でき…理…

以上。