亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從C#中的字符串中刪除字節順序標記

從C#中的字符串中刪除字節順序標記

C#
catspeake 2019-12-15 12:08:37
我讀過類似的文章,但他們沒有回答我的問題。在C#中,我有一個從WebClient.DownloadString獲得的字符串。我嘗試將client.Encoding設置為新的UTF8Encoding(false),但這沒什么區別-我仍然在結果字符串的開頭以UTF-8的字節順序標記結束。我需要刪除它(以使用LINQ解析生成的XML),并希望在內存中刪除它。所以我有一個以\ x00EF \ x00BB \ x00BF開頭的字符串,如果存在,我想刪除它。現在我正在使用if (xml.StartsWith(ByteOrderMarkUtf8)){    xml = xml.Remove(0, ByteOrderMarkUtf8.Length);}但這感覺不對。我已經嘗試了使用流,GetBytes和編碼的各種代碼,但是沒有任何效果。誰能提供從字符串中剝離BOM的“正確”算法?謝謝!
查看完整描述

3 回答

?
長風秋雁

TA貢獻1757條經驗 獲得超7個贊

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


查看完整回答
反對 回復 2019-12-16
?
白豬掌柜的

TA貢獻1893條經驗 獲得超10個贊

我的測試數據不正確,這使我有些困惑?;谌绾卧谧x取文件時避免跳入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仍然不會讀取該字符串。這是我到目前為止提出的最干凈的版本。



查看完整回答
反對 回復 2019-12-16
  • 3 回答
  • 0 關注
  • 364 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號