我使用以下代码使用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;在我的字符串中以及如何删除它。
答案 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;
}