.net 为什么xmltextreader会自动将html编码的utf8字符转换为utf8字符串?
我收到一个编码为“ISO-8859-1”(拉丁语-1)的XML文件 在文件中(在其他标记中),我有.net 为什么xmltextreader会自动将html编码的utf8字符转换为utf8字符串?,.net,xml,encoding,xmltextreader,.net,Xml,Encoding,Xmltextreader,我收到一个编码为“ISO-8859-1”(拉丁语-1)的XML文件 在文件中(在其他标记中),我有示例“content”和─ 现在由于某种原因,当我将其加载到XMLTextReader并执行“XmlReader.Value”返回值时,它返回:“content”和─ 当面对一个只接受拉丁-1编码的数据库时,这显然是错误的 我尝试了以下方法: 转换为字节并使用 编码。从UTF-8转换为更改 转换成拉丁语-1(成功地 给我一堆“?”代替) 使用 StreamReader(文件,编码,随便什
示例“content”和─代码>
现在由于某种原因,当我将其加载到XMLTextReader并执行“XmlReader.Value”返回值时,它返回:“content”和─
当面对一个只接受拉丁-1编码的数据库时,这显然是错误的
我尝试了以下方法:
- 转换为字节并使用
编码。从UTF-8转换为更改
转换成拉丁语-1(成功地
给我一堆“?”代替)
- 使用
StreamReader(文件,编码,随便什么)
将文件加载到XmlTextReader中
在互联网上和你自己身上有几种不同的方法
我知道.NET字符串是UTF-16,但我不明白的是为什么,当存在UTF-8字符时,它是一个具有正确标记的完全拉丁-1格式的XML文件,它与旧数据库和web(用于HTML标记等)兼容,它只是覆盖了UTF-8编码的字符串,并且输出的是UTF-8编码的字符串
除了编写自己的自定义文本解析器之外,还有其他方法可以解决这个问题吗?我不认为这是编码的问题。您看到的是XML字符串被取消转义
问题是“
是一个XML转义字符,因此XMLTextReader将为您取消转义
如果您更改此选项:
<OtherText>Example "content" And ─</OtherText>
您需要将您的值包装在CDATA中,以便解析器忽略它
另一个选项是重新转义字符串:
using System.Security;
....
....
string val = SecurityElement.Escape(xmlReader.Value);
这很有道理。我已经盯着数据看了将近12个小时,但没有注意到!问题是数据是提供给我的,所以我无法对它进行任何更改,除非我写一些东西来更改所指示的符号。让我吃惊的是,它们在文本中也使用了&;。SecurityElement.Escape似乎然而,对于─;它似乎没有识别出它是UTF-8,并将其作为ASCII进行处理,即使MySQL不同意。关闭,但没有雪茄。它仍然会在ā这样的字符上出错(如您所指出的,这是正确编码的,除非不使用&;),因此SecurityElement.Escape()方法不起作用。看起来好像我必须自己做这件事,但在这个过程中没有以某种方式替换有效的&;。多亏了这一观察结果以及上面解释的方法的组合:Dim txt作为新StreamReader(文件路径)Dim memoryStream作为新memoryStream()Dim streamWriter作为新streamWriter(memoryStream)streamWriter.Write(txt.ReadToEnd.Replace(“&;”,“&”).Replace(“&;”,“&;”)streamWriter.Flush()memoryStream.Position=0 Dim xml作为新的xml.XmlTextReader(memoryStream)我能够成功地写入数据!非常感谢您为我指明了正确的方向!
XmlReader.Value = ""content" And ─";
using System.Security;
....
....
string val = SecurityElement.Escape(xmlReader.Value);