こんな URL を見たことがありますか?
http://blogsearch.google.co.jp/blogsearch?q=%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%81%AF%E3%80%81%E3%82%80%E3%81%9A%E3%81%8B%E3%81%97%E3%81%99%E3%81%8E%E3%81%A6%E4%BD%BF%E3%81%88%E3%81%AA%E3%81%84!+&hl=ja&num=100&newwindow=1&lr=lang_ja&sourceid=mozilla-search&um=1&ie=UTF-8&sa=N&tab=wb
そう、google 日本語検索で上記のような URL が出て来ます。
この%文字の羅列は、パーセントエンコーディングされた URL でデコードすると次のようになります。
http://blogsearch.google.co.jp/blogsearch?q=コンピュータは、むずかしすぎて使えない!+&hl=ja&num=100&newwindow=1&lr=lang_ja&sourceid=mozilla-search&um=1&ie=UTF-8&sa=N&tab=wb
このままでは URL になりませんけどね。
検索語が日本語だと%文字の羅列に変換されているわけです。
Wikipedia の URL もそうです。
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF
は
http://ja.wikipedia.org/wiki/コンピュータ
となります。7ビットコード(ASCIIコードともいう)で全て処理するためのルールでしょうね。Web プログラミング用に作られた言語 ARC が7ビットにこだわる訳だ。
最初の URL の最後のほうに UTF-8 とあるの気付き、これらは、UTF-8 を%付の HEX 表示だと考え、デコードプログラム(ソースはこちら)を作りました。コメントはつけていませんが、短いプログラムですので簡単に読めると思います。'%' を外し UTF-8 文字列に変換する関数と UTF-8 の ASCII コード以外を Shift-JIS に変換する関数が含まれます。しかし、掲載したソースには、UNICODE→Shift-JIS 変換関数は、入っていません。必要な場合は、ご自分でご用意下さい。これは、SHIFT - JIS と Unicode 間の変換問題を回避するためです。UNICODE→Shift-JIS変換プログラムの具体的な実装には、こちらが参考になります。
とはいっても、動かなくては意味がありませんから、Windows 用を用意しました。( utf8tosjis.zip のダウンロードはこちらから)。上記変換にまつわる問題は、API 任せです。UTF-8→UNICODE 変換さえ API 任せですから、プログラミング的には、'%' の取り扱いだけです。
使い方は簡単です。"% letters" 下のテキストボックスに変換したい文字列を入力し、下矢印のボタンをクリックすれば、"Decode letters" 下のテキストボックスに変換した文字列が現れます。その逆も可能です。最大文字数は、512バイトです。エラー処理はしていませんので、それ以上の文字を入れた場合、または、変換文字数がそれ以上になった場合の動作は保障されませんのでご注意下さい。
また、%文字の羅列には UTF-8 だけでなく、EUC-JP や Shift-JIS もあります。他にもあるかもしれませんが、配布プログラムが対応しているのは、この3種類です。ただし、自動判別ではありません。UTF-8 でうまくデコードできない時は、EUC-JP や Shift-JIS で試してみてください。
プログラム作製に使ったツールは、Visual C++ 2005 Express Edition 日本語版です。レジストリ等は使用していませんので、適当なフォルダに実行ファイル(UTF8TOSJIS.EXE)を解凍すれば使えます。なおプログラムの実行に際しては、以下のモジュールが必要です。必要に応じてインストールしてください。
Microsoft .NET Framework Version 2.0 再頒布可能パッケージ (x86)
Microsoft .NET Framework 2.0 Service Pack 1 (x86)
なお、掲載したソースおよび実行ファイルは、ご自由にお使い下さい。ただし、ご使用により、いかなる弊害や不具合が生じたとしても当方ではいかなる責任も持ちません。予め、ご了承下さい。
Thinking-J
https://sites.google.com/site/thinkingj2007/home
mail : thinkingj.2007@gmail.com