c# - 使用带有 ISO-8859-1 编码的 XmlTextWriter 编写 XML 文件

标签 c# .net xml encoding iso-8859-1

我在使用 C# 将挪威语字符写入 XML 文件时遇到问题。我有一个字符串变量,其中包含一些挪威语文本(带有像 æøå 这样的字母)。

我正在使用 XmlTextWriter 编写 XML,将内容写入 MemoryStream,如下所示:

MemoryStream stream = new MemoryStream();
XmlTextWriter xmlTextWriter = new XmlTextWriter(stream, Encoding.GetEncoding("ISO-8859-1"));
xmlTextWriter.Formatting = Formatting.Indented;
xmlTextWriter.WriteStartDocument(); //Start doc

然后我像这样添加我的挪威语文本:

xmlTextWriter.WriteCData(myNorwegianText);

然后我像这样将文件写入磁盘:

FileStream myFile = new FileStream(myPath, FileMode.Create);
StreamWriter sw = new StreamWriter(myFile);

stream.Position = 0;
StreamReader sr = new StreamReader(stream);
string content = sr.ReadToEnd();

sw.Write(content);
sw.Flush();

myFile.Flush();
myFile.Close();

现在的问题是,在这个文件中,所有的挪威字符看起来都很滑稽。

我可能以某种愚蠢的方式做了上面的事情。关于如何修复它有什么建议吗?

最佳答案

为什么要先将 XML 写入 MemoryStream,然后再将其写入实际的文件流?那是相当低效的。如果您直接写入 FileStream,它应该可以工作。

如果你仍然想做双写,不管出于什么原因,做两件事中的一件。要么

  1. 确保您使用的 StreamReader 和 StreamWriter 对象全部使用相同编码作为您在 XmlWriter 中使用的编码(不仅仅是 StreamWriter,例如其他人建议)或

  2. 不要使用 StreamReader/StreamWriter。相反,只需使用简单的 byte[] 和 Stream.Read/Write 在字节级别复制流。顺便说一句,无论如何,这会更有效率。

关于c# - 使用带有 ISO-8859-1 编码的 XmlTextWriter 编写 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/139260/

相关文章:

c# - (e, v) => 在 c# 中的含义和更改的属性作为参数

c# - C# 递归方法的意外结果

asp.net - 从 VS2012 迁移到 VS2013 或 VS 2015

java - 尝试用 Java 获取 XML 节点

android - 如何确定应用程序是在平板电脑还是移动设备上运行?

java - 创建的数据库出错

c# - 创建像 ASP.NET MVC 3 ViewBag 这样的类?

c# - COM 方法、Char 类型和 CharSet

javascript - html 中的转义问题

c# - Xunit - 在少数全套测试中禁用并行性