tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。