3 回答

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

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
我的測(cè)試數(shù)據(jù)不正確,這使我有些困惑?;谌绾卧谧x取文件時(shí)避免跳入U(xiǎn)TF-8 BOM的問(wèn)題,我發(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;
}
正確設(shè)置客戶端的Encoding屬性可將BOM減少為單個(gè)字符。但是,XDocument.Parse仍然不會(huì)讀取該字符串。這是我到目前為止提出的最干凈的版本。
- 3 回答
- 0 關(guān)注
- 535 瀏覽
添加回答
舉報(bào)