字符串到字节数组

时间:2016-02-12 19:01:36

标签: c# encoding bytearray

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

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

我面临的问题是它正在添加&#34;?&#34;在我的字符串中。

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

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

我的字符串变为

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

有没有人知道为什么要添加&#34;?&#34;在我的字符串中以及如何删除它。

3 个答案:

答案 0 :(得分:5)

It seems that you showed only simplified code. Am I right that you read data from a file? If yes, check for a BOM (byte order mark) field at the begining of the file. It is used for encoding: UTF-8, UTF-16 and UTF-32.

答案 1 :(得分:0)

这里有几个问题。一个没有显示相关代码。

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

另一方面,如果您正在阅读XML文件,那么它不是&#34;文本&#34;文件。您应该使用XML阅读器。这将使用文件中指示(最有可能)的编码。

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

请记住,从Unicode(UTF-8是一种编码)到其他字符集的转换可能会使用替换字符(通常为&#39;?&#39;)无声地损坏您的数据那些不在目标字符集中的那些。

答案 2 :(得分:-1)

这是我的扩展方法:

   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;
    }