- - PR -
JavaScript での補助文字の扱い方
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-01-11 19:32
IE7 などで、補助文字を JavaScript で扱う方法について調べています。
Java 5.0 で、String クラスに補助文字を扱うためのメソッド(codePointAt等) が追加になっていますが、JavaScript ではそういう関数は追加されていないのでしょうか? ご存知の方がいらっしゃれば教えてください。 |
|
投稿日時: 2007-01-12 15:59
補助文字について詳しくないので検討違いのことを言っているかもしれませんが、
文字参照型で記述したのではだめなのでしょうか? <script> c='a'; document.write(c); <script> でcodepoint=97(a)を表示するので、もしかするとうまくいくかも? |
|
投稿日時: 2007-01-12 16:19
補助文字というとUnicodeの補助文字のことではないでしょうか。
端的に言うと、現在のUnicodeのバージョンである4.0では 16bitの固定長の文字コードではなくなっています。 16bit = 65536文字では世界中の文字を網羅できないため、 可変長にして文字数を増やしているわけです。 そして、0xffffを超える文字コードを当てられている文字を 補助文字と呼んでいるわけですね。 Javaでは5.0からUnicode4.0対応となりStringなどに 修正が加わっていたと思います。 JavaScriptのことは詳しくないですが、各種JavaScriptのエンジンの 公式のドキュメントを探すしかないのではないでしょうか。 MSのJScriptの公式ドキュメントがどこにあるのか私は知りませんが…。 |
|
投稿日時: 2007-01-12 16:59
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=shift_jis"/> </head> <body> <script> c='𐀀'; document.write("["); document.write(c); document.write("]"); </script> </body> </html> で表示させると [𐀀] (↑ブラウザ上は黒い四角になっている。) という表示になってなんか扱えるようにも見えますが... [ メッセージ編集済み 編集者: だっちょ 編集日時 2007-01-12 17:01 ] |
|
投稿日時: 2007-01-12 17:27
HTMLの文字実体参照がISO/IEC-10646を用いるらしいので
規格上は補助文字が扱えることになっているんでしょうね。 ブラウザごとの対応状況はどうなっているんでしょうか。 |
|
投稿日時: 2007-01-15 08:42
ちょっと大雑把な書き方してしまいました。ごめんなさい。
IE7 では、Unicode の補助文字でもちゃんと表示は可能ですが、 JavaScript でその文字を取得すると(Javaと同様に)length は 2 となります。 コードポイント単位で扱う方法はないのかなぁと思ってスレ立てました。 |
|
投稿日時: 2007-01-15 13:09
1文字づつ(文字参照も)区切る関数作ってみました。
codePointではないですが、とりあえず参考までに。 <html><head> <script type="text/javascript"> function codePointString(s) { var retobj = new Array(); for (i=0;i<s.length;i++) { var c = s.charAt(i); if ((c!='&') || (i+3>=s.length) || (s.charAt(i+1)!='#')) { retobj[retobj.length] = c; } else { var codePoint = NaN; var end = s.indexOf(";", i+1); if (end!=-1) { codePoint = parseInt(s.substring(i+2, end)); } if (codePoint==NaN) { retobj[retobj.length] = c; } else { retobj[retobj.length] = s.substring(i, end+1); i = end; } } } return(retobj); } </script> </head> <body> <script type="text/javascript"> s1="[𐀀]"; array=codePointString(s1); document.write("char(0)="); document.write(array[0]); document.write("<br/>char(1)="); document.write(array[1]); document.write("<br/>char(2)="); document.write(array[2]); </script> </body> </html> [ メッセージ編集済み 編集者: だっちょ 編集日時 2007-01-15 13:38 ] |
1