投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/3/11 09:01:44
> データをテキストファイルに出力して、バイナリダンプしたら、
> コードが "00"になっているので Nullだと思っています。

VB.NET に Null というキーワードは無いので、この場合は vbNullChar ですかね。

ところで、"0000" の 2 バイトではなく
"00" の 1 バイトという事は、Shift_JIS や UTF-8 での保存でしょうか。

テキストファイルにする手法は、Encoding の段階で化ける可能性があるので、
String の中身を厳密に調べる場合には、不向きとされる事があります。


'42 30 00 00 A5 33 3F 00 …… ダンプさせる文字列 
Dim A As String = ChrW(&H3042) & ChrW(&H0000) & ChrW(&H33A5) & ChrW(&H003F)

'82 A0 00 3F 3F …… ChrW(&H33A5) が壊れる 
System.IO.File.WriteAllText("C:\sjis.txt", A, System.Text.Encoding.GetEncoding("Shift_JIS"))

'FF FE 42 30 00 00 A5 33 3F 00 
System.IO.File.WriteAllText("C:\utf16-1.txt", A, System.Text.Encoding.Unicode)

'42 30 00 00 A5 33 3F 00 …… 期待する結果に最も近い 
System.IO.File.WriteAllBytes("C:\utf16-2.txt", System.Text.Encoding.Unicode.GetBytes(A))

'2B 4D 45 49 41 41 44 4F 6C 2D 3F 
System.IO.File.WriteAllText("C:\utf7.txt", A, System.Text.Encoding.UTF7)

'EF BB BF E3 81 82 00 E3 8E A5 3F 
System.IO.File.WriteAllText("C:\utf8_1.txt", A, System.Text.Encoding.UTF8)

'E3 81 82 00 E3 8E A5 3F 
System.IO.File.WriteAllText("C:\utf8_2.txt", A)



文字列(String)の内容をダンプする場合には、個々の文字(Char)を
AscW で数値化する方が良いかも知れません。

Dim S As String = ChrW(&H3042) & ChrW(&H0000) & ChrW(&H33A5) & ChrW(&H003F)
ListBox1.DataSource = S.Select(Function(c) String.Format("{0:x4}:{1}", AscW(C), C)).ToList()


Dim S As String = ChrW(&H3042) & ChrW(&H0000) & ChrW(&H33A5) & ChrW(&H003F)
ListBox1.DataSource = Array.ConvertAll(Of CharInteger)(S.ToCharArray(), AddressOf AscW)
'Array.ForEach(Array.ConvertAll(Of Char, Integer)(S.ToCharArray(), AddressOf AscW), AddressOf Console.WriteLine)