2011-12-23 17 views
1

私はここで奇妙な問題があります。私のコードでは、変数bの文字列は、 "Test Test Test"という値を持っています。変数とテキストビジュアライザーのデバッグ中にこの値を見ることができます。メッセージボックスを使用すると変数が切り詰められます

ここで問題は、Messageboxを使用して同じ文字列を表示すると、値が「テスト」に過ぎないということです。私は完全な価値を得るためにここで何ができるのですか?

私は、暗号化されたバイトを対応するutf8文字列に変換し、上記の操作を行っています。何かご意見は。以下は私のサンプルコードです。

Dim hex As String = "e385a2a300000000e385a2a3000000e385a2a3" 
Dim raw As Byte() = New Byte((hex.Length/2) - 1) {} 

Dim i As Integer 
For i = 0 To raw.Length - 1 
    raw(i) = Convert.ToByte(hex.Substring((i * 2), 2), &H10) 
Next i 
Dim w As String = System.Text.Encoding.GetEncoding(37).GetString(raw) 
Dim raw1 As Byte() = Encoding.UTF8.GetBytes(w) 
Dim b As String = Encoding.UTF8.GetString(raw1) 
MessageBox.Show(b) 

答えて

1

バイト配列を見てください。それぞれの "Test"の後には、4つのASCII 0があります。 ASCII文字コード0はnulに対応し、nulは文字列終了シーケンスです。ヌルの代わりに空白が必要な場合は...

Dim b As String = Encoding.UTF8.GetString(raw1).Replace(Chr(0), " ") 
+0

ASCII 0はMSGBOXの文字列終端のみですが、VB6では例外として覚えていますが、そこではデバッグウィンドウの文字列も切り捨てられます。 – Martin

0

文字列「B」かもしれないが、いくつかのcontrol文字が含まれている可能性があります。

制御文字列を文字列でテストするには

For Each p As Char In b 
    MsgBox(p & " " & Char.IsControl(p) & " " & AscW(p)) 
    Next 

String#Replaceを使用して、制御文字を置き換えます。

b = b.Replace(ChrW(0), " ") 
MsgBox(b) 
+0

@CodyGray - 私は自分の投稿を更新しました。 – adatapost

関連する問題