C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: JavaScriptで機種依存文字を判定したい


(過去ログ 99 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■59396 / inTopicNo.1)  JavaScriptで機種依存文字を判定したい
  
□投稿者/ Mira (42回)-(2011/05/24(Tue) 18:40:23)

分類:[JavaScript] 

いつもお世話になります
JavaScriptで機種依存文字の判定を行いたいのですが
charCodeAtではUnicodeで返却されるので範囲を絞るのが大変です
ShiftJisコードを返却するようなものがあれば範囲を絞りやすいのですが・・・
何かいい方法はないでしょうか?

JavaScriptからWebServiceにアクセスしてFrameWork上で判定する方法も思いついてのですが

できればJavaScriptだけで実現したいです

判定するコードはShift-Jisで以下となります
0x8740〜0x8799
0xFA40〜0xFC4B(ここがUnicodeではバラバラです)
0x81BE,0x81BF,0x81E6
引用返信 編集キー/
■59401 / inTopicNo.2)  Re[1]: JavaScriptで機種依存文字を判定したい
□投稿者/ shu (717回)-(2011/05/25(Wed) 07:52:25)

http://mojalog.com/2009/01/javascriptshift_jiseucjp.html

http://www.tohoho-web.com/wwwxx017.htm

こんなのがありましたが、前者はecl.jsというライブラリが必要で
後者はサブミットをしないと取得出来ないようです。標準の状態で簡単に
取得するのはむずかしそうです。


VBScriptだと
http://www.geocities.co.jp/SilkRoad/4511/vb/sample/vbsurlen.htm
こんなのがありました。
引用返信 編集キー/
■59403 / inTopicNo.3)  Re[2]: JavaScriptで機種依存文字を判定したい
□投稿者/ Mira (44回)-(2011/05/25(Wed) 08:47:13)
> こんなのがありましたが、前者はecl.jsというライブラリが必要で

Shuさん回答ありがとうございます
実はecl.jsを使用して実現しようとしていたのですが
(ユニコードのみ存在する文字かどうかの判定はこれで実現できました)
Urlエンコードで変換されるコードとShift-Jisのコードが一致しない文字があり
実現が難しくなりました
例えば
0x8740→%87%40
0x8741→%87A
0x8742→%87B
となりどのように判定すればよいのかわからなくなってる状態です
引用返信 編集キー/
■59406 / inTopicNo.4)  Re[1]: JavaScriptで機種依存文字を判定したい
□投稿者/ Mira (45回)-(2011/05/25(Wed) 09:34:49)
とりあえずUniCodeで範囲文字の配列作成して判定するようにしました

ありがとうございました
解決済み
引用返信 編集キー/
■59409 / inTopicNo.5)  Re[3]: JavaScriptで機種依存文字を判定したい
□投稿者/ 魔界の仮面弁士 (2181回)-(2011/05/25(Wed) 11:18:07)
# 回答に非ず。

No59403 (Mira さん) に返信
>>> charCodeAtではUnicodeで返却されるので範囲を絞るのが大変です
最近の実装では、Unicode で返却されることが多いのですが、
実行ホストによっては、異なる結果を返すことがありますのでご注意を。

たとえば、"あ" の文字(Shift_JIS=82A0、Unicode=U+3042、UTF-8=E38182)を
charCodeAt した場合、IE 系では 0x3042 (=12354) を返しますが、
Netscape の古いバージョンでは、0x82 (=-126) を返すものもありました。

一方、JavaScript の encodeURIComponent / decodeURIComponent による
変換では、常に UTF-8 が採用される事になっていますので、調べるなら
こちらの方が確実かと思います。扱いにくいですけど。

ただし、<form> タグからの送出で送られる場合のエンコーディングについては、
変換規則は encodeURIComponent と同様ですが、その時に使われる文字コードは
UTF-8 になるとは限りません(ページの文字コードに左右される事がある)。

また、それをサーバー側で受け取る際にも、下記のような問題を生じることがあります。
http://goo.gl/goS9M


> Shift-Jisのコードが一致しない文字があり
Unicode と Shift_JIS の間には下記の変換問題がありますが、
今回は、そういう話ではないのですよね?
http://support.microsoft.com/kb/170559/ja


> 例えば
> 0x8740→%87%40
> 0x8741→%87A
> 0x8742→%87B
Shift_JIS でいうところの、丸付き数字1〜3の範囲ですね。(U+2460〜U+2462)

%hh 形式にエンコードする場合には、ピリオド(0x2E)、 マイナス(0x2D)、
アンダーバー(0x5F)、A〜Z、a〜z、0〜9 は変換しないことになっています。

一方、%hh 形式からデコードする場合は、どちらの形式も認識されます。たとえば、
 var x = decodeURIComponent("%41");
 var y = decodeURIComponent("A");
 alert( ( x === y ) ? "一致" : "不一致" );
は「一致」を返しますし、
 http://www.google.co.jp/search?q=A
 http://www.google.co.jp/search?q=%41
というのも、同じ内容を意味します。

http://www.kinet.or.jp/hiromin/cgi_introduction/appendix/url_encode.html
解決済み
引用返信 編集キー/
■59418 / inTopicNo.6)  Re[4]: JavaScriptで機種依存文字を判定したい
□投稿者/ Mira (46回)-(2011/05/25(Wed) 12:19:51)
魔界の仮面弁士さん解説ありがとうございます

互換性のためにencodeURIComponentを使用するように見直します

> %hh 形式にエンコードする場合には、ピリオド(0x2E)、 マイナス(0x2D)、
> アンダーバー(0x5F)、A〜Z、a〜z、0〜9 は変換しないことになっています。

変換方法のなぞがとけました。ありがとうございました

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -