我有一个字节数组,我正在编码为一个字符串:
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
非常感谢任何帮助!
答案 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