There is no Unicode byte order mark. Cannot switch to Unicode(没有 Unicode 字节顺序标记.无法切换到 Unicode)
问题描述
我正在用 XSD 编写一个 XML 验证器.
I am writing an XML validator with XSD.
下面是我所做的,但是当验证器到达 while (list.Read())
行时,它给了我错误
Below is what I did, but when the validator reached the line while (list.Read())
it gives me the error
没有Unicode字节顺序标记.无法切换到 Unicode.
There is no Unicode byte order mark. Cannot switch to Unicode.
有人可以帮我解决吗?
public class Validator
{
public void Validate(string xmlString)
{
Boolean bRet = true;
string xmlPath = @"C:x.xml";
string xsdPath = @"C:general.xsd";
XmlReaderSettings Settings = new XmlReaderSettings();
Settings.Schemas.Add("", xsdPath);
Settings.ValidationType = ValidationType.Schema;
Settings.ValidationEventHandler +=
new ValidationEventHandler(SettingsValidationEventHandler);
XmlReader list = XmlReader.Create(xmlPath, Settings);
//StringBuilder output = new StringBuilder();
while (list.Read())
{
}
//File.WriteAllText(@"D:Output.xml", output.ToString());
}
static void SettingsValidationEventHandler(object sender,
ValidationEventArgs e)
{
if (e.Severity == XmlSeverityType.Warning)
{
MessageBox.Show( "WARNING: ");
MessageBox.Show(e.Message);
}
else if (e.Severity == XmlSeverityType.Error)
{
MessageBox.Show("ERROR: ");
MessageBox.Show(e.Message);
}
}
}
XML
<?xml version="1.0" encoding="utf-16"?>
<FlashList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" vin="xxxxxxxxxxxxx">
<flash ECUtype="xxx" />
</FlashList>
XSD
<?xml version="1.0" encoding="utf-16"?>
<xs:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="FlashList">
<xs:complexType>
<xs:sequence>
<xs:element name="flash" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:string" name="ECUtype" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="Error" maxOccurs="unbounded" minOccurs="0">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute type="xs:byte" name="code" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute type="xs:string" name="vin"/>
</xs:complexType>
</xs:element>
</xs:schema>
推荐答案
您的文件编码的实际情况似乎与您的 XML 声明所指定的相冲突.例如,如果您的文件实际上使用一字节字符,则声明 encoding="utf-16"
不会将其更改为使用两字节字符.
The reality of your file's encoding appears to conflict with that specified by your XML declaration. If your file actually uses one-byte characters, declaring encoding="utf-16"
won't change it to use two-byte characters, for example.
尝试从 XML 声明中删除冲突的编码.替换
Try removing the conflicting encoding from the XML declaration. Replace
<?xml version="1.0" encoding="utf-16"?>
与
<?xml version="1.0"?>
您也可以使用 LoadXML() 将文件加载到字符串中作为解决方法.
You may also be able to load the file into a string as a work-around using LoadXML().
这篇关于没有 Unicode 字节顺序标记.无法切换到 Unicode的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:没有 Unicode 字节顺序标记.无法切换到 Unicode
基础教程推荐
- 将 XML 转换为通用列表 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- c# Math.Sqrt 实现 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01