字符串到字节数组
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 是一种编码)到其他一些字符集的转换可能会悄无声息地用替换字符(通常是“?”)破坏您的数据在目标字符集中。
我正在使用以下代码使用 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 是一种编码)到其他一些字符集的转换可能会悄无声息地用替换字符(通常是“?”)破坏您的数据在目标字符集中。