2011-12-23 66 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