タイトル : Re^4: 【ぷち解決】区点コードからの文字入力 投稿日 : 2011/09/08(Thu) 19:17 投稿者 : よっくん
完全ではありませんが とりあえず出来るようになったので コードを記載しておきます。 (殴り書きレベルですが…) 結局、 区点コード→JISコード→SHIFT_JISコードに変換して 出てきたSHIFT_JISコード - 65536 の値でChr関数を実行 という処理になっています。 JISコード→SHIFT_JISコード変換は 以下のサイトの末尾の方を参考にしました。 http://www.unixuser.org/~euske/doc/kanjicode/index.html Dim JISC As Long Dim JISC_Str As String 'JISコード文字列 Dim Bit2 As String Dim Bit1 As String Dim Joui As String Dim Kai As String Try If e.KeyChar = ChrW(Keys.Enter) Then '区点コード→JISコード変換 Dim KCODE As String = CLng(Me.txt_区点.Text).ToString("00000") JISC = CLng(Mid(KCODE, 1, 3)) + 32 JISC = JISC * 256 JISC = JISC + CLng(Mid(KCODE, 4, 2)) + 32 JISC_Str = Hex(JISC).ToString 'JISコード→SJISコード変換 '上位2文字下位2文字に分ける Joui = Mid(JISC_Str, 1, 2) Kai = Mid(JISC_Str, 3, 2) '上位2文字処理 '21H引く(10進で33) Joui = Hex(CLng("&H" & Joui) - 33).ToString '2進数変換(16進→2進) Bit2 = Convert.ToString(Convert.ToInt32(Joui, 16), 2) Bit2 = CDbl(Bit2).ToString("00000000") '桁揃え '下1桁キープ→下位2文字処理時に使う Bit1 = Mid(Bit2, 8, 1) '上位7桁だけ取り出し Bit2 = Mid(Bit2, 1, 7) '上位7桁を16進にして格納(2進→16進) Joui = Convert.ToInt32(Bit2, 2).ToString("X") Select Case CLng("&H" & Joui) Case 0 To 30 '+81H する(10進で129 Joui = Hex(CLng("&H" & Joui) + 129).ToString Case Else '+C1H する(10進で193 Joui = Hex(CLng("&H" & Joui) + 193).ToString End Select 'この時点で上位2文字確定 '下位処理 '上位処理時の下位1ビットで処理が変わる If Bit1 = "0" Then '+1FHする(10進で31 Kai = Hex(CLng("&H" & Kai) + 31).ToString Select Case CLng("&H" & Kai) Case 64 To 126 'そのまま Case Else '+1Hする(10進で1 Kai = Hex(CLng("&H" & Kai) + 1).ToString End Select Else '+7EHする(10進で126 Kai = Hex(CLng("&H" & Kai) + 126).ToString End If 'この時点で下位確定 Me.txt_Kekka.Text = Chr(CLng("&H" & Joui & Kai) - 65536) End If Catch ex As Exception Me.txt_Kekka.Text = "Error" End Try ※注意 ・入力値 区点コードは 9501〜11494の間しか試してません ・全部の文字を目視確認した訳では無いので 100% OKとは言えません ・以下の区点コードが入力されたらコケます 9698 9699 9898 9899 10098 10099 10298 10299 10498 10499 10698 10699 10898 10899 11098 11099 11298 11299 |