繁体   English   中英

字符串到字节数组

[英]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"/>"

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

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

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

但是,如果您使用有效的方法从UTF-8,UTF-32等文件中读取文本,则字符串中将没有BOM,因为该字符串将保留文本, 而BOM不是文本的一部分。

另一方面,如果您正在读取XML文件,则它不是“文本”文件。 您应该使用XML阅读器。 使用(最可能)在文件中指示的编码将非常小心。

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

但是,请记住,从Unicode(对于UTF-8是一种编码)到其他字符集的转换可以用替换字符(通常为“?”)对不在目标字符集中的那些字符进行静默破坏, 。

这是我的扩展方法:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM