XmlDocument.Load 失败,LoadXml 工作:

2023-11-24

在回答中这个问题,我遇到了一个我不明白的情况。 OP 尝试从以下位置加载 XML:

显而易见的解决方案是:

string m_strFilePath = "http://www.google.com/ig/api?weather=12414&hl=it";
XmlDocument myXmlDocument = new XmlDocument();
myXmlDocument.Load(m_strFilePath); //Load NOT LoadXml

然而这失败了

XmlException:给定编码中的字符无效。 1 号线,位置 499。

似乎被噎住了à of Umidità.

OTOH,以下工作正常:

var m_strFilePath = "http://www.google.com/ig/api?weather=12414&hl=it";
string xmlStr;
using(var wc = new WebClient())
{
    xmlStr = wc.DownloadString(m_strFilePath);
}
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xmlStr);

我对此感到困惑。谁能解释为什么前者失败,但后者工作正常?

值得注意的是,文档的 xml 声明省略了编码。


The WebClient使用 HTTP 响应标头中的编码信息来确定正确的编码(在本例中ISO-8859-1这是基于 ASCII 的,即每个字符 8 位)

看起来像XmlDocument.Load不使用此信息,并且由于 xml 声明中也缺少编码,因此它必须猜测编码并得到错误的结果。经过一番研究,我相信它选择了 UTF-8。

如果我们想获得真正的技术性,它抛出的字符是“à”,在 ISO-8859-1 编码中是 0xE0,但这不是一个有效的字符UTF-8- 具体来说,该字符的二进制表示形式是:

11100000

如果你在周围挖掘UTF-8 维基百科文章我们可以看到,这表示一个代码点(即字符),总共由 3 个字节组成,格式如下:

Byte 1      Byte 2      Byte 3
----------- ----------- -----------
1110xxxx    10xxxxxx    10xxxxxx

但如果我们回顾一下文档,接下来的两个字符是“:”,即 ISO-8859-1 中的 0x3A 和 0x20。这意味着我们最终得到的结果是:

Byte 1      Byte 2      Byte 3
----------- ----------- -----------
11100000    00111010    00100000

序列的第二个或第三个字节都没有10作为两个最高有效位(表示连续),因此该字符在 UTF-8 中没有意义。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XmlDocument.Load 失败,LoadXml 工作: 的相关文章

  • boost::multi_index_container 复合键中的 equal_range 与比较运算符

    我正在尝试从多索引容器查询结果 其中值类型是三个元素的结构 第一个值已给出 但第二个和第三个值必须大于或小于查询参数 经过搜索后 我发现必须实现自定义密钥提取器 并且这里的一些链接建议相同 但我无法实现它 boost multi index
  • 在 Xamarin Android 中将图像从 URL 异步加载到 ImageView 中

    我有一个包含多个项目的 ListView 列表中的每个项目都应该有一个与之关联的图像 我创建了一个数组适配器来保存每个列表项并具有我希望加载的图像的 url 我正在尝试使用 Web 请求异步加载图像 并设置图像并在加载后在视图中更新它 但视
  • 如何在C++中实现模板类协变?

    是否可以以这样一种方式实现类模板 如果模板参数相关 一个对象可以转换为另一个对象 这是一个展示这个想法的例子 当然它不会编译 struct Base struct Derived Base template
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • c# Asp.NET MVC 使用FileStreamResult下载excel文件

    我需要构建一个方法 它将接收模型 从中构建excel 构建和接收部分完成没有问题 然后使用内存流导出 让用户下载它 不将其保存在服务器上 我是 ASP NET 和 MVC 的新手 所以我找到了指南并将其构建为教程项目 public File
  • HttpClient 像浏览器一样请求

    当我通过 HttpClient 类调用网站 www livescore com 时 我总是收到错误 500 可能服务器阻止了来自 HttpClient 的请求 1 还有其他方法可以从网页获取html吗 2 如何设置标题来获取html内容 当
  • .Net Core / 控制台应用程序 / 配置 / XML

    我第一次尝试使用新的 ConfigurationBuilder 和选项模式进入 Net Core 库 这里有很多很好的例子 https docs asp net en latest fundamentals configuration ht
  • A* 之间的差异 pA = 新 A;和 A* pA = 新 A();

    在 C 中 以下两个动态对象创建之间的确切区别是什么 A pA new A A pA new A 我做了一些测试 但似乎在这两种情况下 都调用了默认构造函数 并且仅调用了它 我正在寻找性能方面的任何差异 Thanks If A是 POD 类
  • 使用向量的 merge_sort 在少于 9 个输入的情况下效果很好

    不知何故 我使用向量实现了合并排序 问题是 它可以在少于 9 个输入的情况下正常工作 但在有 9 个或更多输入的情况下 它会执行一些我不明白的操作 如下所示 Input 5 4 3 2 1 6 5 4 3 2 1 9 8 7 6 5 4 3
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 网络参考共享类

    我用 Java 编写了一些 SOAP Web 服务 在 JBoss 5 1 上运行 其中两个共享一个类 AddressTO Web 服务在我的 ApplycationServer 上正确部署 一切都很顺利 直到我尝试在我的 C 客户端中使用
  • 什么是 C 语言的高效工作流程? - Makefile + bash脚本

    我正在开发我的第一个项目 该项目将跨越多个 C 文件 对于我的前几个练习程序 我只是在中编写了我的代码main c并使用编译gcc main c o main 当我学习时 这对我有用 现在 我正在独自开展一个更大的项目 我想继续自己进行编译
  • 将应用程序从 Microsoft Access 迁移到 VB 或 C#.NET

    我目前正试图说服管理层需要将我们的应用程序之一移植到 NET 该应用程序已经发展成为 Access 中的一个庞然大物 SQL 后端 拥有 700 个链接表 650 个表单 子表单 130 个模块和 850 个查询 我几乎知道这样做的所有主要
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 已过时 - OpenCV 的错误模式

    我正在使用 OpenCV 1 进行一些图像处理 并且对 cvSetErrMode 函数 它是 CxCore 的一部分 感到困惑 OpenCV 具有三种错误模式 叶 调用错误处理程序后 程序终止 Parent 程序没有终止 但错误处理程序被调
  • GDK3/GTK3窗口更新的精确定时

    我有一个使用 GTK 用 C 语言编写的应用程序 尽管该语言对于这个问题可能并不重要 这个应用程序有全屏gtk window与单个gtk drawing area 对于绘图区域 我已经通过注册了一个刻度回调gtk widget add ti
  • 将变量分配给另一个变量,并将一个变量的更改反映到另一个变量中

    是否可以将一个变量分配给另一个变量 并且当您更改第二个变量时 更改会瀑布式下降到第一个变量 像这样 int a 0 int b a b 1 现在 b 和 a 都 1 我问这个问题的原因是因为我有 4 个要跟踪的对象 并且我使用名为 curr
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • 为什么 strtok 会导致分段错误?

    为什么下面的代码给出了Seg 最后一行有问题吗 char m ReadName printf nRead String s n m Writes OK char token token strtok m 如前所述 读取字符串打印没有问题 但

随机推荐

  • JavaScript .prototype 如何工作?

    我不太热衷于动态编程语言 但我已经编写了相当多的 JavaScript 代码 我从来没有真正了解过这种基于原型的编程 有人知道这是如何工作的吗 var obj new Object obj prototype test function a
  • SQL LIKE 语句的 LINQ 版本

    我是 LINQ 的新手 在网上搜索模仿 SQL 的 LIKE 语句的 LINQ 示例并不能让我满意 我想要的是产生与此 SQL 相同的查询结果 SELECT FROM table 1 WHERE column 1 LIKE 0 我想从 ta
  • Neo4j:MERGE 创建重复节点

    我的数据库模型有用户和 MAC 地址 一个用户可以有多个MAC地址 但一个MAC只能属于一个用户 如果某个用户设置了他的 MAC 并且该 MAC 已经链接到另一个用户 则现有关系将被删除 并在新所有者和该 MAC 之间创建新关系 换句话说
  • 在 Swing 应用程序中使用 Hibernate 进行会话管理

    如何在 Java Desktop Swing 应用程序中进行 Hibernate 会话管理 您使用单个会话吗 多次会议 以下是有关该主题的一些参考资料 http www hibernate org 333 html http blog sc
  • 围绕多个插入或更新使用事务的正确方法

    测试插入 更新失败并回滚此事务 如果有 的正确方法是什么 我认为我所拥有的不起作用 因为我的插入 更新是 3 个单独的语句 并且 ROWCOUNT 将仅反映最后执行的语句 BEGIN TRANSACTION Script GO INSERT
  • php isset() 在 javascript 中等效

    我正在寻找与 php 函数等效的 javascriptisset 我已经尝试过此处描述的方法JavaScript isset 等效项但在 firebug 中 出现错误 data del is undefined Firebug warnin
  • 使用 awk 从 stdin 或文件读取

    到目前为止 这是我的代码 awk a length END for i in a print i a i lt 1 sort n 它从文本文件中读取行的长度 并输出行的长度 然后输出有多少行具有相同的长度 所以输入 hello guys h
  • Passport.js - 隐式将 {user: req.user} 传递给模板?

    现在在多个项目中使用 Passport js 和 Express 我注意到自己一遍又一遍地这样做 即指定 user req user 明确用于我的 Express 路线 有时我忘记传递它 突然之间就像用户甚至不再登录一样 我怎样才能通过us
  • “……”标记是什么意思?即参数包上的双省略号运算符

    在浏览 gcc 当前对新 C 11 标头的实现时 我偶然发现了 标记 您可以检查以下代码编译良好 来自 godbolt org template
  • MapReduce 中的叉积

    我想使用 Java MapReduce 在 Hadoop 中的两个数据集上执行昂贵的叉积操作 例如 我有数据集 A 和数据集 B 中的记录 并且我希望输出中数据集 A 中的每条记录与数据集 B 中的每条记录相匹配 我意识到它的输出大小是 A
  • QML:将滚动条附加到ListView

    我在使用 ListView 时遇到问题 ListView 太长 部分出现在窗口之外 但我无法附加滚动条 我尝试了很多不同的组合 我认为问题在于高度参数 但如果删除它 ListView 仅显示第一个条目 Column anchors fill
  • 自定义 UITableViewCell 内的 UISwitch 不可用

    我有一个UISwitch自定义里面UITableViewCell 我称之为的子类RootLabeledSwitchTableCell 该细胞含有一个UILabel and UISwitch彼此相邻 我有一个 property called
  • Hql,如何在具有一对多关系的表之间编写联接查询?

    I have 2表 1st一个有oneToMany有关系2nd 班级作者 Entity Table name Author Public class Author Id Column name AuthorId private int au
  • 如何将进程输出通过管道传送到 Windows 和 JDK 6u45 上的文件

    我有以下 Windows 批处理文件 run bat echo off echo hello batch file to sysout 以下 java 代码运行批处理文件并将输出重定向到文件 public static void main
  • 像 Firefox 一样制作带有标题的 JPanel 边框

    我想在我的应用程序中创建一个选项对话框 在此对话框中 我想创建一种由边框和标题包围的区域 我想要的一个例子是在 Firefox 中 我怎样才能在Java中做类似的事情呢 Here您可以找到您需要的所有信息 基本上 您可以使用边框工厂使用 S
  • 清除Android毕加索图片库的磁盘/SD卡缓存

    我正在使用 Picasso 从我的服务器加载图像 它工作正常 但我正在加载图像 并稍后更改它 但是Picasso将图像缓存在磁盘中的某个位置 我检查了SD卡 没有找到Picasso存储的任何目录 我尝试按照此问题的已接受答案的建议删除缓存
  • 简单的 Zlib C++ 字符串压缩和解压缩

    我需要在 C 中对 std string 进行简单的压缩和解压缩 我看了这个site代码适用于字符数组 我想要实现的是两个功能 std string original This is to be compressed std string
  • 将邪恶的抽象 Ajax 行为与 jQuery.ajax() 一起使用

    我已经使用 jQuery AJax 调用来发送 JSON 如此处所述堆栈溢出 问题是我没有在服务器上收到任何数据 我可以看到调用确实达到了目标ajax行为 但是在onRequest 方法中 RequestCycle dd不包含任何参数 我的
  • 如何在 Windows 中使用 MinGW 的 CLion 中的 C 项目中使用 pthread 头文件

    我正在尝试包括 include
  • XmlDocument.Load 失败,LoadXml 工作:

    在回答中这个问题 我遇到了一个我不明白的情况 OP 尝试从以下位置加载 XML 显而易见的解决方案是 string m strFilePath http www google com ig api weather 12414 hl it X