JISコードの表示ツールを作る
どうも、三流プログラマーのKen3です。 今回は、 漢字のJISコードの表示ツールを作ってみたいと思います。 プログラムは、 http://www.ken3.org/p/e/vbnet013.lzh に圧縮したプロジェクトが入ってます。 あわせて見てください。/* * 1. 仕様を決める */
画面仕様 調査文字列 [ _______________ ] txtMOJI 結果 [ ____________________ ] txtOUT [ ____________________ ] 複数行可能とする 流れ ユーザーが確認したい文字列を入力後、調査開始のボタンを押します 文字列から1文字単位で文字を取り出し、コードを表示します。 オヤ?どこかで見たような?仕様だなぁ。 文字コードの表示で使ってた画面と一緒ですね。 txtMOJIと入力用にテキストボックスを作成して、 結果をtxtOUTに書き込むことにします。/* * 2.下準備、調べごと */
漢字コード、JISコードの変換関数ないかなぁ、と調べ始める。 Asc関数をヘルプで見ると、返ってくるコードは、 解説 Asc は、入力文字に対するコード ポイント (文字コード) を返します。 2 バイト文字セット (DBCS: Double-Byte Character Set) 値に対しては -32768 〜 32767 です。 返される値は、TextInfo クラスの ANSICodePage プロパティに含まれている 現在のスレッドのコード ページによって異なります。 TextInfo.ANSICodePage は、 System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage を指定することによって取得できます。 なんかよくわかんないねぇ。 MsgBox(Hex(Asc("愛"))) で実際にテストしてみよう。 FFFF88A4?なにこれ? ( 実行画像) どうやら、シフトJISみたいですね、頭のFFFFは気になるけど、 88A4がシフトJISです。 とすると、シフトJISをJISに直す関数をチェックすると、 えっ無いの?(探し方が悪いのか?それとも漢字コードなんて気にしないのか?) シフトJIS JISコード 変換表 をキーワードにgoogleを検索する OSF 日本ベンダ協議会 (OSF/JVC) 推奨 日本語 EUC ・シフト JIS 間コード変換仕様とコード系実態調査 http://www.opengroup.or.jp/jvc/cde/sjis-euc.html 日経ソフトウエア JIS漢字コード http://software.nikkeibp.co.jp/software/special/jiscode/nc.html なんだか、よくわかんないよ(笑) オレは変換プログラムを書きたいんだってば、 *自分で変換の意味見て計算式ぐらい書けよ。 と読者の声が聞こえたところで、 初心者によるエンコーディングと文字セットメモ http://sanaki-web.hp.infoseek.co.jp/code/encode.htm を見ると、やっと変換の式が書いてある。 >S-JIS -> JIS >if(第一バイト <= 0x9F){ >第一バイト = 第一バイト - 0x71 >} >else{ >第一バイト = 第一バイト - 0xB1 >} >第一バイト = 2 * 第一バイト + 1 >if(第ニバイト > 0x7F){ >第ニバイト = 第ニバイト - 1 >} >if(第ニバイト >= 0x9E){ >第ニバイト = 第ニバイト - 0x7D >第一バイト = 第一バイト + 1 >} >else{ >第ニバイト = 第ニバイト - 0x1F >} を元に作成してみる。 'シフトJISコードの文字列を受け取り、JISコードを返す
Function SJIStoJIS(strSJISCODE As String) As String Dim hi As Long Dim lo As Long 'シフトJISコードの上位バイトを hi、下位バイトを lo とします。 hi = Val("&h" & Mid(strSJISCODE, 1, 2)) lo = Val("&h" & Mid(strSJISCODE, 3, 2)) 'hi が 0x9f 以下の場合、 hi から 0x71 減じます。 'そうでない場合、 hi から 0xB1 減じます。 hi = hi - IIf(hi <= &H9F, &H71, &HB1) 'hi に 2 を乗じて、さらに 1 を加えます。 hi = hi * 2 + 1 'lo が 0x7F より大きい場合、 lo から 1 減じます。 If lo > &H7F Then lo = lo - 1 'lo が 0x9E 以上の場合、lo から 0x7D 減じて、hi に 1 加えます。 If lo >= &H9E Then lo = lo - &H7D hi = hi + 1 Else 'そうでない場合、 lo から 0x1F 減じます。 lo = lo - &H1F End If '結果を返します SJIStoJIS = Right("0" & Hex(hi), 2) & Right("0" & Hex(lo), 2) End Function |