1
我有以下XML:转换KOI8-R XML节点转换为Unicode在C#
<root>
<text><![CDATA[ОПЕЛХМЮБЮ ОПЕГ БЗПРЪЫ ЯЕ АЮПЮАЮМ, Б ЙНИРН ЯЕ]]></text>
</root>
我知道这段文字是用编码KOI8-R产生的(这个文本显示在我的文本编辑器中,只有当我选择这种编码当我打开XML文件为文本),我想将此节点的值转换为可在C#中使用的字符串。我可以读取此节点的InnerText值,但这不是我所期望的。有人能告诉我用这种编码将字符串转换成Unicode的正确方法吗?
更新
继乔恩斯基特建议,解决方案应该是这样的:
Encoding encoding = Encoding.GetEncoding("KOI8-R");
XmlDocument doc2 = new XmlDocument();
using (TextReader tr = new StreamReader(outputPath, encoding))
{
doc2.Load(tr);
}
该文件是由外部工具生成的(xpdf - 我认为),这是我得到的唯一的东西。现在,我不太熟悉linq和外部声明......我应该使用哪些名称空间来指定OpenText方法的编码?我尝试了System.Linq和System.Xml.Linq,但它们都没有工作... – dcg 2012-01-02 10:41:50
@dcg:如果你不想使用'XDocument',那么'XmlDocument.Load'也会带一个'TextReader' 。但是,如果xpdf基本上创建了一个无效的XML文件或一个文本错误的文件,那么它非常糟糕。您确定这不是在流水线早期出现问题吗?确切地找出问题出在哪里是值得的,否则你很可能会丢失数据。 – 2012-01-02 10:44:23
不幸的是,我无法去改变那件事。这是非常旧的代码由其他人写的,它迄今为止工作得很好。对我来说,看看innerText值会更容易/更快。那么,它就是这样的!谢谢! – dcg 2012-01-02 10:55:04