我读过类似的文章,他们没有回答我的问题。
在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的“正确”算法?
谢谢!
如果变量xml是字符串类型,则您已经做错了- 在字符串中,BOM不应表示为三个单独的字符,而应表示为单个代码点。不要使用DownloadString,而要使用DownloadData,并解析字节数组。XML解析器应该识别BOM本身,然后跳过它(自动检测文档编码为UTF-8除外)。