一尘不染

从C#中的字符串中删除字节顺序标记

c#

我读过类似的文章,他们没有回答我的问题。

在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的“正确”算法?

谢谢!


阅读 246

收藏
2020-05-19

共1个答案

一尘不染

如果变量xml是字符串类型,则您已经做错了-
在字符串中,BOM不应表示为三个单独的字符,而应表示为单个代码点。不要使用DownloadString,而要使用DownloadData,并解析字节数组。XML解析器应该识别BOM本身,然后跳过它(自动检测文档编码为UTF-8除外)。

2020-05-19