3 回答

TA貢獻1757條經(jīng)驗 獲得超7個贊
如果變量xml是字符串類型,則您已經(jīng)做錯了-在字符串中,BOM不應表示為三個單獨的字符,而應表示為單個代碼點。不要使用DownloadString,而要使用DownloadData,并解析字節(jié)數(shù)組。XML解析器應該識別BOM本身,然后跳過它(自動檢測文檔編碼為UTF-8除外)。

TA貢獻1893條經(jīng)驗 獲得超10個贊
我的測試數(shù)據(jù)不正確,這使我有些困惑?;谌绾卧谧x取文件時避免跳入UTF-8 BOM的問題,我發(fā)現(xiàn)這可行:
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 關注
- 363 瀏覽
添加回答
舉報