▽ UTF-8ブラウザ別対応状況 ※このホームページはUTF-8で記述されています。

Javascriptで数値文字参照の値を求める方法

>

世界無二の英語スピーキング習得システム(特許申請中)

数値文字参照(「あ」を表すのに、「あ = あ」と書く方法。)を使えば、Shift_JISやEUC-JPのホームページでも、日韓混合文や日中混合文を作成したり、機種依存文字を混ぜることも(多少サポートしていないMac版ブラウザがあります。)可能であることは、こちらのページで見たとおりです。

では、この「12354」という数字はどのように求めるのでしょうか? 一つは、Javascriptを使って、下記のようなフォームで求める方法です。(ただし、Netscape4.Xでは、ブラウザの問題で正しく動作しません。詳細はこちらのページを参照してください。また、Mac版IEでも、テキストエリア=入力欄が文字化けしたりします。また、Mac版IEでは機種依存文字やハングル文字の数値文字参照値は求められません。)

韓国語の入力には、こちらのハングルWEB入力システムを使っていただければ、簡単に入力できて便利かもしれません。もしくは、試しに「안녕하십니까」をコピー&ペーストしてテストしてみてください。Windows版Internet ExplorerやMacOS10.3のSafariなどで動作確認しています。
下記に変換したい文字列を貼り付けてください。

  


ここに、変換結果が表示されます。



具体的なJavascriptのコードは、このページのHTMLソースを見ていただいければ分かりますが、charCodeAtメソッドを用います。HTMLのヘッダー部分に、左のようにConvertという自作関数を定義しています。意外と簡単な仕組みになっています。

Javascriptの関数定義の部分は、左のテキストボックスの中に記したコードのようになります。参考にしてください。


もう一つの方法は、特定文字のUnicode(ユニコード)値(16進数)を10進数表記にすることです。Unicode値は、WindowsのIME 2002なら「ツール→IMEパッド→文字一覧」を選びます。そこで、左端の「シフト JIS」という文字の横の三角印をクリックして「unicode」を選択します。これで、Unicodeの文字一覧が表示されます。

上の例のように、「考」という漢字は、unicodeは「0x8003」(「0x」とは、その後に続く文字列が16進数であることを示しています。)であることが分かります。16進数の8003は、10進数では「32771」です。したがって、「考」は「考 = 考」と表記できることが分かります。

ただ、16進数から10進数への変換が多少面倒です。暗算が得意でない人は難しいでしょう。そこで、Windowsなら付属の電卓を関数電卓として利用できますので、関数電卓で計算してみます。(もちろん、16の3乗×8+3と普通の電卓で計算しても良いです。)

Windowsならパスが通っているでしょうから、スタートメニューの「ファイル名を指定して実行」のところに「calc」と入力してenterキーを押します。電卓が起動します。普通の電卓が起動した場合は、メニューの「表示」から「関数電卓」を選択してください(Windows98なら、メニューの「電卓の種類」から「関数電卓」を選択してください。)。下記のような画面が表示されます。

ラジオボタンの16進数を選択し「8003」と入力し、今度は「10進数」という項目の横のラジオボタンをクリックすれば、「32771」と表示されます。こうして、「考 = 考」が求められました。

って、実はこれ重大な落とし穴がありますね。そもそも、IMEパッドの文字一覧から該当の文字を探すのだけで大変です。そうなんです。これはIMEパッドの文字一覧の存在を知っていただくために説明しました。実際には、このIMEパッドの文字一覧では、該当文字を探すのが至難の業ですので、次のようなフリーソフトを使うことをお勧めします。

● 漢字コード表 Kanji ver1.0
http://www.pleasuresky.co.jp/kanji.php3

を使います。ここで、右下のボックスに「あ」と入力して「jump」ボタンをクリックします。すると、右の画像のように「あ」の行が選択されます。これにより、「あ」は、Shift_JIS(JMS)では、0x82A0、EUCならA4A2と分かります。そしてUnicodeなら0x3042と分かります。16進数で3042ということは、普通の計算機を使うなり関数電卓を使うことで、10進数で12354と分かります。「あ = あ」と入力することで、「あ」を表現できます。

また、多少裏技になりますが、「HanglinGT」ハングル文字の入力支援ソフト(シェアウェア。1,365円)を使うことでも、数値文字参照値を求めることができます。本来はハングル文字の数値文字参照を手軽にクリップボードにコピーするための機能ですが、日本語でも可能です。ただし、一部の文字「ー」(長音記号)や韓国の漢字と日本の漢字で異なるもの(「学」と「學」。「数」と「數」、「参」と「參」など。)などが文字化けすることもあります。

最後にもう一つだけ方法を紹介します。PHPを利用します。フォーム(Shift_JISもしくはEUC-JPで作成。)にハングルを入力しPOSTすると、PHPプログラムのほうでは、自動的に数値文字参照の形でフォームの値を取得します。日本語は日本語として普通に受け取りますが、ハングル文字は数値文字参照の形でブラウザには表示されます。PHPのサンプルはこちら

(ただし、このサンプルプログラムが期待通りに動作するのはWindows版IEや、ネットスケープ7.02以上(Win、Macとも)ぐらいです。その他のブラウザでは正しく動作しません。例えばWindows版Netscape6.01でどのようにデータがサーバに送られているのか調べたところ、フォームからPOSTもしくはGETされる段階で「????」という文字列がサーバに送信されているのが分かりました。これでは、サーバ側のPHPではどうしようもありません。)

(期待通りに動作するブラウザを利用している場合には、)GETもしくはPOSTされたハングル文字はサーバに送られた段階で、自動的に数値文字参照の値として$_GET['hogehoge']や$_POST['hogehgoge']の中に入っていますので、「print $_GET['hogehoge'];」とすれば、「안녕하십니까」がprintされます。そして、HTMLソースを見ると、「안녕하십니까」となっていることが分かります。HTMLソースをわざわざ見るのは面倒ですから、$_GET['hogehoge']に対してeregi_replace関数などで「&」を「&」に変換する作業をプログラム内で行っておけば、ブラウザにそのまま数値文字参照の値が表示されることになります。

次のページでは、ISO-2022-JP(JISコード)で送るのが"プログラムの常識"と信じられていたメールの文字コードについて考えます。UTF-8で送信すれば、多言語の混合文もメールの送受信が可能なような気がします。主要なメールソフトの対応状況を調べてみました。


【広告】 マジック・トーカーズでモバイル英語学習     【広告】 .htaccessが利用可能なサーバ

【広告】 BOWS(ボウス):カロリーカットダイエット     【広告】 ADSL1M プロバイダ比較

【広告】 IP電話プロバイダ比較     【広告】 アトピーのかゆみに安眠パジャマ