3 回答
TA贡献1757条经验 获得超7个赞
如果变量xml是字符串类型,则您已经做错了-在字符串中,BOM不应表示为三个单独的字符,而应表示为单个代码点。不要使用DownloadString,而要使用DownloadData,并解析字节数组。XML解析器应该识别BOM本身,然后跳过它(自动检测文档编码为UTF-8除外)。
TA贡献1893条经验 获得超10个赞
我的测试数据不正确,这使我有些困惑。基于如何在读取文件时避免跳入UTF-8 BOM的问题,我发现这可行:
private readonly string _byteOrderMarkUtf8 =
Encoding.UTF8.GetString(Encoding.UTF8.GetPreamble());
public string GetXmlResponse(Uri resource)
{
string xml;
using (var client = new WebClient())
{
client.Encoding = Encoding.UTF8;
xml = client.DownloadString(resource);
}
if (xml.StartsWith(_byteOrderMarkUtf8, StringComparison.Ordinal))
{
xml = xml.Remove(0, _byteOrderMarkUtf8.Length);
}
return xml;
}
正确设置客户端的Encoding属性可将BOM减少为单个字符。但是,XDocument.Parse仍然不会读取该字符串。这是我到目前为止提出的最干净的版本。
- 3 回答
- 0 关注
- 340 浏览
添加回答
举报