我这里有一个奇怪的问题。在我的代码中,变量b string的值为“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)
答案 0 :(得分:1)
查看字节数组。每次“测试”后,您有4个ASCII 0。 ASCII字符代码0对应于nul,这是一个字符串终止序列。如果你想要空格而不是空...
Dim b As String = Encoding.UTF8.GetString(raw1).Replace(Chr(0), " ")
答案 1 :(得分: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)