JavaScriptでUnicode 6.0の文字をきちんと扱う

小飼弾さんのエントリ参照

ライブラリのソースコード


JavaScriptで文字列オブジェクトのlengthやcharAt()を使うと、Unicode 6.0の文字がサロゲートペアで扱われてしまうという問題がある。

var str = "😁"; // U+1F601, Unicode 6.0の絵文字
str.length; // 2
str.charAt(0); // 上位サロゲート: U+D83D
str.charAt(1); // 下位サロゲート: U+DE01

小飼弾さんが書いた codepoints.js (String.prototypeを拡張するライブラリ) を使って、lengthの代わりにcodepointsを、charAt()の代わりにuCharAt()を代用すれば期待通りの動作になる。

var str = "😁"; // U+1F601, Unicode 6.0の絵文字
str.codepoints; // 1
str.uCharAt(0); // U+1F601