• ベストアンサー

JavascriptでのSJIS判定

標題の用に、UTF-8で保存されている、htmlから フォームのテキストエリアにSJISの文字以外の文字列が入力された場合、 アラートをあげるような動きを実装させたく困っております。 charCodeAtでUnicodeを取得し、sjisコードと比較すれば良いと思い調べたのですが、 参考になるページを見つける事ができませんでした。 また、IE9以降とFirefoxの両方で動作すればと考えております。 どうぞ、ご教授よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.1

一般的に言われるShiftJISはMicrosoft Codepage 932 (CP932/MS932)のことを指すことが多いため その前提で話をすると、 以下のページにCP932の一覧表があり対応するUnicodeのコードポイントも記載してあります。 Windows Codepage 932 http://msdn.microsoft.com/ja-JP/goglobal/cc305152.aspx (複数ページから構成されていることに注意) そのため、上記ページからCP932に対応するUnicodeコードポイントの一覧を作り charCodeAtの値と比較することでCP932の範囲内の文字であるかどうかが判別できると思います。 (一覧を作るのが面倒なので すでに同じことをやった人がいないか調べたことがあるのですが、 探し方が悪かったのか私が調べたときは見つけられませんでした。)

RYO-88
質問者

お礼

Gotthold様 ありがとうございました。 やはり、どこかで拾う事はできなさそうですね。 早速、教えて頂いたページを元に作成してみました。 マイクロソフトのページなのですが間違いはないかと思うのですが、表の下の一覧からリストを作成した所、なぜか結構重複が・・・。 作成時のミスかもしれませんが、もう少し調査が必要そうでした。 この度は、本当にありがとうございました。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.2

#1の方がいわれているようにshift-jisの各文字に対応するunicodeのコードポイントの一覧を付くっておいて、その中に含まれるかどうかで判断する事になると思いますが、そのJavaScriptはshift-jisで扱える約11,000文字分のデータを持つ事になります。それだけ大きなデータを持つJavaScriptをブラウザで処理させるのかどうかは検討された方がよいと思います。

RYO-88
質問者

お礼

wormhole様 ありがとうございました。 確かにブラウザで処理させる数ではない気がします。 まだ、重複問題でunicodeの一覧ができていないので何とも言えませんが、うまく判定処理を考えれば全部なめなくても良さそうですので、取り敢えず実装してみる事に致します。 この度は、本当にありがとうございました。

関連するQ&A

  • JAVAでSJISのコード変換

    JAVAで、UnicodeからSJISへのコード変換を行った上で ファイル出力を行いたいです。 たとえば文字列中にある「(1)」の文字コードが以下である時 ------------------------------- SJIS:8744 - UNICODE:2464 ------------------------------- 2464のコードを8744に変換した上でファイル出力したいです。 処理として、以下の様な形を考えているのですが 文字化けしてしまします。 ------------------------------- String source = "(1)あああああ"; 文字列の数分ループ処理↓ int code = (int) (source[x].charAt(i)); if (code == 2464) { strBuff.append(String.valueOf((char) (8744))); } ------------------------------- Unicodeで扱われているので「getByte("SJIS")」などとしているのですが 同様の結果となります。 何か良い手はないものでしょうか?

    • ベストアンサー
    • Java
  • SJIS→UTF-8の文字コード変換

    Perlで、SJISの16進で表記された文字があるのですが、それがうまく表示できません。 Unicodeの16進文字コードだとうまく表記できるのですが…。 以下がスクリプトです。 以下の場合だと。(句点)がSJISだと0x8142で、 その16進文字列を表示したいのですが、実行結果にあるエラーが出てしまいます。 Unicodeだと。は0x3002なのですが、うまく表示できています。 すみませんがよろしくお願いします。 ---------------------------------------- # このファイルの文字コードはSJIS # 改行コードはLF # # 。 SJIS 0x8142 # Unicode 0x3002 # use Jcode; use encoding "sjis"; $a = 0x8142; $a = Jcode->new($a, "sjis")->utf8; printf("句点の表示…%c\n",$a); printf("句点の表示…%c\n",0x3002); ---------------------------------------- 実行結果 "\x{8142}" does not map to shiftjis at test.pl line 14, <DATA> line 846. 句点の表示…\x{8142} 句点の表示…。

    • ベストアンサー
    • Perl
  • SJIS→UTF-8変換後の文字化けについて

    EXCELで作ったテキストデータ(SJIS)をPHPで読み込んでUTF-8でDBへ書き込むという処理をしたいのですが、一部どうしても文字化けしてしまう文字("l(リットル)"と"II")があり困っています。 具体的には、data.dat(SJIS)を、 hoge.php(UTF-8)で、 $data = mb_convert_encoding(file_get_contents("data.dat"),"UTF-8","auto"); というようにしています。 テキストデータはSJIS、DBへはUTF-8というのは変えられません。 なにかよい方法はないでしょうか?

    • ベストアンサー
    • PHP
  • javascriptでsjisの文字列からutf-8に変換する方法が知りたいです。

    javascriptでsjisの文字列からutf-8に変換する方法が知りたいです。 複雑なJavascriptだと、低速な端末だと表示速度に影響が出るのでしょうか? ※Javascriptがこんなに発展するとは思っていませんでした。

  • SJIS->UTF8->SJISコード変換について

    Windows XPでVB.NET2010で文字コード変換のプログラムを下記のように作成しました。 Dim beforeStr As String = "変換前" Dim utfEnc = System.Text.Encoding.GetEncoding(65001) Dim sjisEnc = System.Text.Encoding.GetEncoding(932) Dim beforeBytes() As Byte = utfEnc.GetBytes(beforeStr) Dim afterBytes() As Byte = System.Text.Encoding.Convert(sjisEnc, utfEnc, beforeBytes) Dim afterStr As String = sjisEnc.GetString(afterBytes) TextBox3.Text = afterStr Dim reverseStr As String = afterStr Dim reverseBytes() As Byte = sjisEnc.GetBytes(reverseStr) Dim baseBytes() As Byte = System.Text.Encoding.Convert(utfEnc, sjisEnc, reverseBytes) TextBox4.Text = utfEnc.GetString(baseBytes) SJIS->UTF8に変換して、確認のためにUTF8->SJISに逆変換してみましたが、 「変換」までは正しいのですが、最後の「前」が文字化けしてしまします。 正しくSJIS-.UTF8->SJISするには、どのように修正すればよろしいでしょうか? よろしくお願いします。

  • 文字コードsjisをUTF8に書き換えたい

    CGIの勉強中の者です。 文字コードはSJISで保存しているCGIをUTF8コードに換えるには何が必要でしょうか? HTMLならmeta内をSJISからUTF8に変更し、TeraPadなどのテキストエディタでUTF8に保存すればオッケーなんですが。 CGIの場合はHTMLと違って、換えるには複雑なのでしょうか? CGIプログラムの中では以下の「sjis」を「UTF8」に書き換えし、UTF8で保存しましたけど、文字化けが出てます。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; 宜しくお願いします。

    • 締切済み
    • CGI
  • JavaScriptまったくの初心者です。

    JavaScriptまったくの初心者です。 文法も何も分からない状態です。。。 ホームページの ・テキストエリア1 ・テキストエリア2 ・テキストエリア3 があったとして、そこに入力された文字列をホームページ上に表示させることってできますか? 表示方法としては 「僕は「テキストエリア1に入力された文字列」「テキストエリア2に入力された文字列」です。」 という感じです。 テキストエリアに入力が無い場合は 「僕はです。」 といった感じで表示したいのです。。。 しかも、テキストエリアに入力があった場合、テキストエリアの文字の頭に「!」を付けたいです。 (例)テキストエリア1に「テスト」テキストエリア3に「サンプル」と入力があった場合   僕は!テスト!サンプルです。 JavaScriptでできるのかどうか、できる場合の記述を教えてください。 完全にまる投げとなってしまい本当に申し訳ございませんが、とても困っています。。。 宜しくお願い致します。

  • ubuntuのようなutf8マシンでsjisを扱う方法について

    perlでwebページを作ってるんですが、ブラウザからサーバーにformで文字が遅れなくて困っています。 1.ブラウザで文字入力 2.perlで取得してsjisに変換。 3.MySQLにその文字列を登録。 ということをしようと思っているのですが、2の段階でsjisに変換できず困っています。 $a=Jcode::convert($a,"sjis","utf8") などと書いてみますがうまくいきません。 どなたかご指南頂けたら幸いです。

  • VBScript文字列をSJISからUTF8へ関数

    VBScriptでSJISの文字列を、UTF8に変換し、 UTF8で設定されたMySQLへ保存したい。 SJISをUTF8に変換する関数をご教授いただきたいです。 以下をまるまるコピーさせていただき試してみたのですが、 文字化けしたメッセージが返されます。 Function TextToBin(TextData, CharSet) Const adTypeBinary = 1 Const adTypeText = 2 Dim objStream Set objStream = CreateObject("ADODB.Stream") objStream.Type = adTypeText objStream.Charset = CharSet objStream.Open objStream.WriteText TextData objStream.Position = 0 objStream.Type = adTypeBinary Select Case UCase(CharSet) Case "UNICODE","UTF-16" objStream.Position = 2 Case "UTF-8" objStream.Position = 3 End Select TextToBin = objStream.Read objStream.Close Set objStream = Nothing End Function msgbox TextToBin("テスト","UTF-8") ←文字化ける msgbox TextToBin("テスト","UTF-16") ←文字化けない

  • CakePHPでDBに入れる際文字化け

    お世話になります。 現在CakePHPで携帯サイトを作成しているのですが、 通常出力は問題ないのですが、 フォームからDBに入れる際に文字化けが起こります。 ■現在行っている設定 charset=SJIS ファイルの文字コード:SJIS CakePHPのdatabese.phpのエンコード設定:SJIS MySQL の文字セット: UTF-8 Unicode (utf8) ご教授よろしくお願いいたします。

    • 締切済み
    • PHP