读取 xml 文件包含损坏日语字符的多语言字符

Read xml file contains multi language characters corrupting characters of Japanese language

Xml 文件编码如下:

<?xml version="1.0" encoding="iso-8859-1"?>

包含如下所述的一些日语字符:

<Name>
    <![CDATA[熊本大学Slave_1002 大 [EL2002]]]>
</Name>

虽然读取同一个文件会损坏日文字符,并且它会变成名称

<Name><![CDATA[????Slave_1002 ? [EL2002]]]></Name>

下面是读取文件的代码。

using (StreamReader streamReader = new 
    StreamReader(filePath,System.Text.Encoding.GetEncoding("iso8859-1")))
    {
        XDocument xdoc = XDocument.Load(streamReader);
    }

也尝试使用 UTF-8 和 unicode 编码。

我快速检查了规范,据我所知,CDATA 部分应该与文档的其余部分具有相同的编码,但也有一些 known issues。由于您已经尝试过 utf-8...是否在文档序言 <?xml version="1.0" encoding="like here" ?> 中指定了任何其他编码?奇怪的是你能在文本编辑器中看到这些字符。


此编码 iso-8859-1 是拉丁文,无法处理日语。所以我创建了一个这样的测试 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<Name>
  <![CDATA[熊本大学Slave_1002 大 [EL2002]]]>
</Name>

并且 VS 告诉我将其保存为 UTF-8,并且根本不允许 select 将其作为文档编码。我也写个测试程序

var xml = XDocument.Load(@"..\..\test.xml");
var val = ((XCData)xml.Root.FirstNode).Value;
Console.WriteLine(val);
File.WriteAllText(@"..\..\cdata.txt", val);
Console.ReadLine();

这让我在控制台上 但在文本文件中..

总结一下:

  1. 我认为 xml 不在声明的编码中(至少部分)
  2. System.Xml.Linq 工作正常,所以这不是怪癖之类的
  3. 您可能会正确读取该值,但在查看时遇到问题。
  4. 我已将声明的文档编码更改为 iso 并使用 new StreamReader(@"..\..\test.xml", Encoding.UTF8); 作为 XDocument 源,结果是正确的。