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