读取 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();
这让我在控制台上
但在文本文件中..
总结一下:
- 我认为 xml 不在声明的编码中(至少部分)
System.Xml.Linq
工作正常,所以这不是怪癖之类的
- 您可能会正确读取该值,但在查看时遇到问题。
- 我已将声明的文档编码更改为 iso 并使用
new StreamReader(@"..\..\test.xml", Encoding.UTF8);
作为 XDocument
源,结果是正确的。
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();
这让我在控制台上
总结一下:
- 我认为 xml 不在声明的编码中(至少部分)
System.Xml.Linq
工作正常,所以这不是怪癖之类的- 您可能会正确读取该值,但在查看时遇到问题。
- 我已将声明的文档编码更改为 iso 并使用
new StreamReader(@"..\..\test.xml", Encoding.UTF8);
作为XDocument
源,结果是正确的。