2011-12-23 64 views
1

我在這裏有一個奇怪的問題。在我的代碼中,變量b字符串的值爲「Test Test Test」。我們可以在調試變量時以及在文本可視化器中看到這個值。使用消息框時可變截斷

現在的問題是,如果我使用Messagebox顯示相同的字符串,則值就是「Test」。我可以在這裏做什麼來獲得完整的價值。

我正在從ebcdic編碼的字節轉換爲相應的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

看看字節數組。在每次「測試」之後,您有4個ASCII 0。 ASCII字符碼0對應於nul,這是一個字符串終止序列。如果你想空間,而不是空值...

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

ASCII 0是僅在MSGBOX中的字符串終止,我記得它仍然是VB6中的異常,它在寫入變量時還在調試窗口中截斷了一個字符串 – Martin 2011-12-23 12:22:40

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 2011-12-23 11:02:09