DOBON.NET DOBON.NETプログラミング掲示板過去ログ

JISコードバイト配列から文字列の変換が上手く出来ない。

環境/言語:[Windows XP, VB.NET 2008, Framework 3.5]
分類:[.NET]

こんにちは。
"System.Text.Encoding"を使ってJISコードデータを文字に変換しようとしていますが
上手く動作せず困っています。

実行結果を見ると、1Byte文字のデータとして認識されてしまうようです。
2byteとして、認識されるには手続きが必要なのでしょうか?
コードは下記のようなものです。

'JISとして変換
Dim objJISConv As Encoding = Encoding.GetEncoding("iso-2022-jp") 
Dim arryData() as byte 
Dim str as string 

arryData(0) = &H5C
arryData(1) = &H49

str = objJISConv.GetString(arryData)

このコードで str には "\I" と出力されていました。
それぞれ1byte JISコードの "\" と "I"が出力されてしまいます。

正しく変換を行うためには、上記以外にも手続きが必要なのでしょうか?


また、上記の文字コード&H4952では漢字の"府"に変換されるはずなのですが、
逆に文字列をJISのByte配列に変換させようと、下記を実行してみました。

Dim arryByte() As Byte = objJISConv.GetBytes("府")

結果は何故か8Byteになってしまいました。
(&H0)    &H1B    Byte
(&H1)    &H24    Byte
(&H2)    &H42    Byte
(&H3)    &H49    Byte
(&H4)    &H5C    Byte
(&H5)    &H1B    Byte
(&H6)    &H28    Byte
(&H7)    &H42    Byte

根本的に何かが間違っているように思えるのですが、それが何なのか
全く解らず、困り果てております。
iso-2022-jpは、一つのバイトデータが複数の意味を持っています。&H49がIであると同時に「府」の一部を構成するように。
で、あるバイトデータがどの意味で使われているのかを表現するために、数バイトのエスケープシーケンスを使って説明します。
> (&H0) &H1B Byte
> (&H1) &H24 Byte
> (&H2) &H42 Byte

> (&H5) &H1B Byte
> (&H6) &H28 Byte
> (&H7) &H42 Byte
「府」においてはこの3バイトずつのデータがそれです。
実際の細かいところはこの辺とかいかがでしょう。
http://charset.7jp.net/jis.html

エスケープシーケンスが使われていないうちはASCIIなので、当然Iとか\として扱われます。

あと、
> (&H3) &H49 Byte
> (&H4) &H5C Byte
とあるように、初めのコードだと49と5Cが逆ですよ。
Hongliangさん 
 返信ありがとうございます。

> 数バイトのエスケープシーケンスを使って説明します。


JISコードとして認識するには、エスケープシーケンスが必要なのですね。

> http://charset.7jp.net/jis.html

ここは何度も見ていましたが、コード表ばかり見ていて
冒頭の"エスケープ〜"を全く読んでいませんでした。


実際のプログラムでは、文字データがJISコードで記録されたファイルを読み込み
それを表示するような動きをさせようと思っています。
文字データは2byte JISコードのみで記録されているので、表示側で
エスケープシーケンスを補うなどしてから、Encodingをかける必要があるのですね・・・・。

補完して変換させる方法を試したいと思います。

DOBON.NET | プログラミング道 | プログラミング掲示板