Chr*_*son 1 .net ascii byte-order-mark utf-8
使用.net ASCIIEncoding类将字节数组解码为字符串时,是否需要编写一些代码来检测并删除字节顺序标记,或者是否可以告诉ASCIIEncoding不将字节顺序标记解码为字符串?
这是我的问题,当我这样做时:
string someString = System.Text.ASCIIEncoding.Default.GetString(someByteArray)
Run Code Online (Sandbox Code Playgroud)
someString看起来像这样:
<?xml version="1.0"?>.......
Run Code Online (Sandbox Code Playgroud)
然后我打电话给这个:
XElement.Parse(someString)
Run Code Online (Sandbox Code Playgroud)
由于前三个字节引发异常:EF BB BF - UTF8字节顺序标记.所以我认为,如果我指定UTF8编码,而不是默认,如下所示:
System.Text.ASCIIEncoding.UTF8.GetString(someByteArray)
Run Code Online (Sandbox Code Playgroud)
ASCIIEncoding不会尝试将字节顺序标记解码为字符串.当我将返回的字符串复制到notepad ++中时,我可以看到一个?XML标记前面的字符.所以现在字节顺序标记被解码成单个垃圾字符.在这种情况下,停止解码字节顺序标记的最佳方法是什么?
请不要使用
ASCIIEncoding.UTF8
Run Code Online (Sandbox Code Playgroud)
那真是公正
Encoding.UTF8
Run Code Online (Sandbox Code Playgroud)
它根本没用ASCIIEncoding.它只是在你的源代码中看起来像它.
从根本上说,问题是你的文件是 UTF-8,它不是 ASCII.这就是为什么它有一个UTF-8字节顺序标记.我强烈建议你用这种 Encoding.UTF8方式读取UTF-8文件.
如果您阅读该文件File.ReadAllText,我怀疑它会自动删除BOM.或者你可以在打电话之前修剪它XElement.Parse.使用错误的编码(ASCII或Encoding.Default)不是正确的方法.同样,它不是垃圾角色.它是一个非常有用的角色,非常强烈地表明它确实是一个UTF-8文件 - 只是你不想在这个特定的环境中使用它."垃圾"给人的印象是它不应该存在于文件中的损坏数据,而且绝对不是这样.
另一种方法是避免将其转换为文本.例如:
XElement element;
using (XmlReader reader = XmlReader.Create(new MemoryStream(bytes))
{
element = XElement.Load(reader);
}
Run Code Online (Sandbox Code Playgroud)
这样编码将被自动检测.
| 归档时间: |
|
| 查看次数: |
3561 次 |
| 最近记录: |