Unicodeと文字コードの仕組み ― なぜ文字化けは起きるのか
メールとかWebページで「文字化け」ってたまに見るけど、あれってなんで起きるの?
いい質問だね。コンピュータは文字を「数字」として扱っているんだけど、昔はその数字の割り当て方が国や地域ごとにバラバラだったんだよ。英語圏ではASCIIっていう規格で、A=65、B=66みたいに128文字だけ定義されていた。日本語はShift_JIS、中国語はGB2312っていう別々の規格を使っていたんだ。
それぞれ別のルールで数字を割り振ってたってこと? そりゃ混ざったらおかしくなるよね…
Unicodeってどういう仕組みなの?
でも番号を決めただけだと、実際にファイルに保存するときはどうするの?
だからWebサイトのほとんどがUTF-8を使ってるんだね! UTF-16とかUTF-32っていうのもあるって聞いたけど…
サロゲートペアって何だか難しそう…具体的にはどういうこと?
UTF-16では0xD800〜0xDBFFが「上位サロゲート」、0xDC00〜0xDFFFが「下位サロゲート」として予約されていて、この2つをペアにして1つの文字を表すんだ。たとえば絵文字の「😀」はU+1F600だけど、UTF-16では0xD83D+0xDE00という2つの値のペアになる。JavaScriptで'😀'.lengthが2になるのはこのせいだよ。
すごい…! 他にもUnicodeで意外と厄介な問題ってあるの?
プログラマーが気をつけるべきポイントって他にもある?
見た目が同じなのに中身が違う文字があるなんて怖い…! Unicodeって奥が深いんだね。