VB上で、漢字を含む文字をJISコード(16進数)に変換するプログラムを作りたいのですが、どなたか教えてもらえませんか?
(例)Text1に「亜」を入力 →変換→ Text2に「3021」が出力
http://madia.world.coocan.jp/vb/vb_bbs2/200401_04010054.html
ちなみに過去ログを検索して、上のページの魔界の仮面弁士さんの方法を試したのですが、ソースをコピペして最後に「Text1 = B」を付けて実行したのですが、Text1の結果は「?????」でした。どうしてでしょうか?他にも方法があれば教えてほしいです。
皆様のご助言を頂きたいです。宜しくお願い致します。 m(_ _)m
(魔界の仮面弁士様へ、勝手に引用して申し訳ありません。)
VB6の文字コードは、Unicode (UTF-16) で表されています。
JISのバイナリを渡せば、化けて表示されるのも当然でしょう。
16進数表記のデータが欲しいのであれば、そのサンプルの最後に
Dim V As Variant
For Each V In B
Debug.Print Right("0" & Hex(V), 2)
Next
などのようなコードを加えてみてください。
魔界の仮面弁士様!!即レスありがとうございます。できました。感謝です。
ずぅずぅしいのですが、もうひとつ教えてもらえないでしょうか?
逆にJIS(16進数表記)の文字データをUnicode の文字データにするときは、どうすればよいのでしょうか?(例)「1B244230211B2842」→「亜」
JIS(16進数表記)のデータを一度バイト型に格納してから変換しなければならないのでしょうか?その格納する方法もわからないです。教えてもらえないでしょうか?
わからないことばかりです。どうか宜しくお願いいたします。
横から失礼します。
とりあえず、16進表記→バイト配列の関数だけうpしておきます。
-VB6-
Public Function GetByteArray(ByVal codeString As String) As Byte()
'codeString:JIS(16進数表記)の文字データ
Dim i As Long
Dim sLen As Long
Dim buf() As Byte
sLen = Len(codeString) \ 2
ReDim buf(1 To sLen)
For i = 1 To sLen
buf(i) = Val("&h" & Mid$(codeString, (i - 1) * 2 + 1, 2))
Next
GetByteArray = buf
End Function
※「1B244230211B2842」→「亜」
これって…エンコード形式分からないんだけど…何だろう…
> 横から失礼します。
後ろから失礼します。(ぉぃ
ガッさんの作成された関数と同じ機能ですが、こんな書き方もあります。
Function GetByteArray(ByVal HexText As String) As Byte()
With CreateObject("Microsoft.XMLDOM").createElement("tmp")
.DataType = "bin.hex"
.Text = HexText
GetByteArray = .NodeTypedValue
End With
End Function
> これって…エンコード形式分からないんだけど…何だろう…
最初に JIS とか書かれていたので、iso-2022-jp でしょう。
Const adTypeBinary = 1
Const adTypeText = 2
With CreateObject("ADODB.Stream")
.Open
.Type = adTypeBinary
.Write GetByteArray("1B244230211B2842")
.Position = 0
.Type = adTypeText
.Charset = "iso-2022-jp" '_autodetect でも可
Text1.Text = .ReadText()
.Close
End With
> 魔界の仮面弁士さん
失礼されました(ぇ
> ガッさんの作成された関数と同じ機能ですが、こんな書き方もあります。
…そんな方法があったとは…
(XMLでバイナリ扱うときに使う…みたい)
> > これって…エンコード形式分からないんだけど…何だろう…
> 最初に JIS とか書かれていたので、iso-2022-jp でしょう。
普通にShift_JISかと思ってました(orz
おかげさまで解決できました!!!
魔界の仮面弁士様、ガッ様。大大大感謝です!
(ちなみにJISです。言葉足らずでスマソ!)
お二方の構文を見てると、もはや宇宙語のように見えます。(^^;)
こんな難問をスラスラ解けるなんて、すごぉいです!きっとお二方にとっては、こんなのは難問とは言わないんでしょうね。僕も頑張って勉強します。本当にありがとうございました。。。(^o^)//
おかげさまで解決できました!!!
魔界の仮面弁士様、ガッ様。大大大感謝です!
(ちなみにJISです。言葉足らずでスマソ!)
お二方の構文を見てると、もはや宇宙語のように見えます。(^^;)
こんな難問をスラスラ解けるなんて、すごぉいです!きっとお二方にとっては、こんなのは難問とは言わないんでしょうね。僕も頑張って勉強します。本当にありがとうございました。。。(^o^)//
ありがとうございます。(何もしてないけど言われると嬉しいなぁ)
↓について調べてみました。
> > 最初に JIS とか書かれていたので、iso-2022-jp でしょう。
> 普通にShift_JISかと思ってました(orz
"制御コード"という単語を思い出すだけで時間かかってしまいまして、
分かればなんてことはないですね。
・1B 24 42
で JIS X 0208 に切り替え
・1B 28 42
で ASCII に切り替え
らしいです。
参照:
http://x68000.q-e-d.net/~68user/webcgi/char-code-1.html
ツイート | ![]() |