- PR -

JavaScript での補助文字の扱い方

1
投稿者投稿内容
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2007-01-11 19:32
IE7 などで、補助文字を JavaScript で扱う方法について調べています。
Java 5.0 で、String クラスに補助文字を扱うためのメソッド(codePointAt等)
が追加になっていますが、JavaScript ではそういう関数は追加されていないのでしょうか?
ご存知の方がいらっしゃれば教えてください。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-01-12 15:59
補助文字について詳しくないので検討違いのことを言っているかもしれませんが、
文字参照型で記述したのではだめなのでしょうか?

<script>
c='&#97;';
document.write(c);
<script>
でcodepoint=97(a)を表示するので、もしかするとうまくいくかも?

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-12 16:19
補助文字というとUnicodeの補助文字のことではないでしょうか。

端的に言うと、現在のUnicodeのバージョンである4.0では
16bitの固定長の文字コードではなくなっています。
16bit = 65536文字では世界中の文字を網羅できないため、
可変長にして文字数を増やしているわけです。
そして、0xffffを超える文字コードを当てられている文字を
補助文字と呼んでいるわけですね。

Javaでは5.0からUnicode4.0対応となりStringなどに
修正が加わっていたと思います。

JavaScriptのことは詳しくないですが、各種JavaScriptのエンジンの
公式のドキュメントを探すしかないのではないでしょうか。
MSのJScriptの公式ドキュメントがどこにあるのか私は知りませんが…。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 2007-01-12 16:59
<html><head>
<meta http-equiv="Content-Type" content="text/html;charset=shift_jis"/>
</head>
<body>
<script>
c='&#65536;';
document.write("[");
document.write(c);
document.write("]");
</script>
</body>
</html>
で表示させると
[&#65536;]
(↑ブラウザ上は黒い四角になっている。)
という表示になってなんか扱えるようにも見えますが...


[ メッセージ編集済み 編集者: だっちょ 編集日時 2007-01-12 17:01 ]
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-01-12 17:27
HTMLの文字実体参照がISO/IEC-10646を用いるらしいので
規格上は補助文字が扱えることになっているんでしょうね。
ブラウザごとの対応状況はどうなっているんでしょうか。
ふーばー
大ベテラン
会議室デビュー日: 2003/06/05
投稿数: 163
投稿日時: 2007-01-15 08:42
ちょっと大雑把な書き方してしまいました。ごめんなさい。
IE7 では、Unicode の補助文字でもちゃんと表示は可能ですが、
JavaScript でその文字を取得すると(Javaと同様に)length は 2 となります。
コードポイント単位で扱う方法はないのかなぁと思ってスレ立てました。
だっちょ
大ベテラン
会議室デビュー日: 2006/12/05
投稿数: 115
投稿日時: 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="[&#65536;]";

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

スキルアップ/キャリアアップ(JOB@IT)