Panda Noir

JavaScript の限界を究めるブログです。

HTMLで?をUnicode表記で表示する方法

(この記事はQiitaで僕が書いたものを移行した記事です。記事中のコメントはQiitaの該当記事を参照ください)

ずばりこれ

🍣

?をUnicodeに変換するコードは下。???もいけた。?は出来なかった。謎である。(下に追記があります)

const sushi = '?';
let res = 0;
for (let i = 0; !isNaN(sushi.charCodeAt(i)); i++) {
    res += sushi.charCodeAt(i);
}
alert('&#' + (res + 15300) + ';');

sushiはやるとわかるけど2つに分かれててcharCodeAtで2つ分取ってこないといけない。あと15300という数字足してるけど、ぶっちゃけどういう意味かわかってない。 なぜか?は15300ではなく16323。規則性がありそうだ。1023だけずれていて意味ありげだ。今後調査しよう。

当たり前だがAとかそういった絵文字でないコードをUnicodeへ変換するコードではない。絵文字専用である(全てに対応しているとは言っていない)。

追記

コメントいただきましたので追記。 ?はサロゲートペアに部類されるそうです。サロゲートペア自体は知ってたのですが深く知らずまた無知を晒してしまった…コメント参考にして修正したコード↓

const sushi = '?';
const hi = sushi.charCodeAt(0);
const lo = sushi.charCodeAt(1);
const uni = 0x10000 + (hi - 0xD800) * 0x400 + (lo - 0xDC00);
alert('&#' + uni + ';');