VB.NET编码一个字符错误

时间:2010-06-16 14:39:23

标签: vb.net encoding binary bytearray

我有一个字节数组,我正在编码为一个字符串:

Private Function GetKey() As String
    Dim ba() As Byte = {&H47, &H43, &H44, &H53, &H79, &H73, &H74, &H65, &H6D, _
                        &H73, &H89, &HA, &H1, &H32, &H31, &H36}

    Dim strReturn As String = Encoding.ASCII.GetString(ba)

    Return strReturn
End Function

然后我通过IO.File.AppendAllText将其写入文件。 如果我在010编辑器中打开该文件(查看二进制数据),则显示如下:

47 43 44 53 79 73 74 65 6D 73 3F 0A 01 32 31 36

原始字节数组在第11位包含 89 ,编码字符串包含 3F 。 如果我将编码更改为Encoding.Default.GetString,它会给我:

47 43 44 53 79 73 74 65 6D 73 E2 80 B0 0A 01 32 31 36

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

Encoding.ASCII仅限于7位字符。这是从0到127的字节值(& H00到& H7F)。 GetString将此范围之外的所有值设置为& H3F,这是一个问号。

Encoding.Default是操作系统的当前ANSI代码页,在我的计算机上是CodePage 1252 ..

  

ANSI代码页可以不同   在不同的计算机上,或者可以   改为一台电脑,领先   数据损坏。最多的   一致的结果,应用   应该使用Unicode,例如UTF-8   (代码页65001)或UTF-16   特定代码页。

Encoding.UTF7会在这里为您效劳:

Dim strReturn As String = Encoding.UTF7.GetString(ba)

修改

我没有使用编码,而是使用以下内容直接编写字节:

Dim key = GetKey()
Dim f = System.IO.File.OpenWrite("output.txt")
f.Seek(0, SeekOrigin.End)
f.Write(key, 0, key.Length)
f.Close()

Private Function GetKey() As String
  Dim ba() As Byte = {&H47, &H43, &H44, &H53, &H79, &H73, &H74, &H65, &H6D, &H73, &H89, &HA, &H1, &H32, &H31, &H36}

  Return ba
End Function