2007年02月07日

サロゲートペアをJavaScriptで検出する方法

ちょっと調べる機会があったので。


まずサロゲートペアの性質について

・Unicode と UTF
http://www.parof.jp/Programing/Unicode/
Unicode で「D800〜DFFF」の範囲(これがサロゲート領域)にあるビット列がでてきたら、次の2バイトと合わせて1文字と認識しなさい、と定められています(逆に言うと、「D800〜DFFF」はそれだけで表現される文字というのが定められていません)。そしてこの領域のうち「D800〜DBFF」は4バイトのうち上位2バイトで使い、「DC00〜DFFF」は下位2バイトで使われます。



JavaScriptのcharCodeAtメソッドでサロゲートペアの文字
一文字を調べると、charCodeAt(0)で上位サロゲートのコード、
charCodeAt(1)で下位サロゲートのコードが返ってきます。
(ちなみにlengthは2です)

ここまで分かっていれば普通はコードをすらすら
書けるのでしょうけど、どうも最近コーディングしてないせいか
サボリ癖が。
そこで、それらしいサンプルをネットで探したのですが
なかなか見つかりませんでした。
ふとGoogle Code Search思い出して
「surrogate charCodeAt」で検索したら、それらしいのを発見。

blogs/rsc/js/md5.js - Google Code Search
「/* Decode utf-16 surrogate pairs */」というコメントの付近。

x = input.charCodeAt(i);
y = i + 1 < input.length ? input.charCodeAt(i + 1) : 0;
if(0xD800 <= x && x <= 0xDBFF && 0xDC00 <= y && y <= 0xDFFF)
{
〜略〜
}



これを参考にして、サロゲートペアの有無をチェックするものを
作ってみました。

こちら

自分用に作ったものなので、参考程度にとどめておいてください。

個別に取得した上位サロゲートと下位サロゲートのコード
再度組み合わせて一文字として表示させるには
String.fromCharCode(上位サロゲート,下位サロゲート);
とやるようなのですが、これがわかるのに苦労しました。
posted by webdev at 21:21| Comment(1) | TrackBack(1) | JavaScript | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
こんにちは、りばてぃです。
ブログへのコメントありがとうございました。
掲載されているサンプル、参考にさせていただきました。
Posted by りばてぃ at 2007年02月18日 23:21
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/33141943

この記事へのトラックバック

[VBScript][Activer Server Pages]VBScriptでサロゲートペアの文字を検出する方法
Excerpt: Web系雑記: サロゲートペアをJavaScriptで検出する方法にインスパイアされて、サロゲートペアの文字を検出するVBScriptを作成してみました。 サロゲートペアとは サロゲートペアとは、通..
Weblog: 大人になったら肺呼吸
Tracked: 2009-10-16 23:53
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。