字符串到字节数组

String to Byte Array

我正在使用以下代码使用 ASCII 编码将我的字符串转换为字节数组。

String data = "<?xml version="1.0" encoding="utf-8"?><ns0:ReceivedPayment Amount="1.01"/>"
byte[] buffer = Encoding.ASCII.GetBytes(data);

我面临的问题是添加“?”在我的字符串中。

现在,如果我再次将我的字节数组转换回字符串

var str = System.Text.Encoding.Default.GetString(buffer);

我的字符串变成

string str = "?<?xml version="1.0" encoding="utf-8"?><ns0:ReceivedPayment Amount="1.01"/>"

有谁知道为什么要加“?”在我的字符串中以及如何删除它。

这是我的扩展方法:

   public static byte[] ToByteArray(this string str)
    {
        var bytes = new byte[str.Length * sizeof(char)];
        Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
        return bytes;
    }

看来你只展示了简化的代码。您从文件中读取数据对吗?如果是,请检查文件开头的 BOM(字节顺序标记)字段。它用于编码:UTF-8、UTF-16和UTF-32。

这里有几处错误。一个是没有显示相关代码。

尽管如此,如果您使用有效的方法从 UTF-8、UTF-32 等文件中读取文本,您的字符串中将不会有 BOM,因为字符串将包含文本并且 BOM 不是文本的一部分。

另一方面,如果您正在读取 XML 文件,则它不是 "text" 文件。您应该使用 XML reader。这将注意使用文件中(最有可能)指示的编码。

并且,当您编写 XML 文件(我假设您将使用字节数组)时,您应该使用 XML 编写器。这将注意使用您指定的编码并将其写入文件。

不过请记住,从 Unicode(UTF-8 是一种编码)到其他一些字符集的转换可能会悄无声息地用替换字符(通常是“?”)破坏您的数据在目标字符集中。