xml如何在适用于所有PC的.Net中序列化德语变音符号?

How xml serialze german umlaut character in .Net that works on all pcs?

提问人:Aram Gevorgyan 提问时间:9/27/2023 最后编辑:Aram Gevorgyan 更新时间:9/27/2023 访问量:33

问:

我正在尝试将文本序列化为包含德语 ä 字符的 xml 文件,当我在一台 PC 上运行此代码时,它工作正常,在其他 PC 上而不是 ä 我得到 д 或 &#x434,在其他 PC 上,当我运行代码时,我得到方形。我尝试了不同的东西,这是我的代码:

string text = "säure";


XmlSerializerNamespaces xmlnsEmpty = new XmlSerializerNamespaces();

xmlnsEmpty.Add("", ""); // This line solves the issue with saving XML file with German letters on some PCs
XmlSerializer xmlSerializer = new XmlSerializer(typeof(string));
var utfWithoutBom = new UTF8Encoding(false);
var settings = new XmlWriterSettings
{
      Encoding = Encoding.UTF8, // Use UTF-8 to support German letters
    Indent = true,
    OmitXmlDeclaration = true,

};

using var stream = new FileStream("output.xml", FileMode.Create);
//using var sw = new StreamWriter(stream,Encoding.GetEncoding("ISO-8859-1"));
using var writer = XmlWriter.Create(stream, settings);
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("de-DE");
xmlSerializer.Serialize(writer, text, xmlnsEmpty);

例如,我得到这个结果:

enter image description here

从我的代码中可以看出,我几乎尝试了所有方法,但 notihng 有所帮助。我做错了什么?

.NET XML 编码 xmlwriter

评论

2赞 Jon Skeet 9/27/2023
为什么要使用 ISO-8859-1?只需在任何地方使用 UTF-8。也不清楚你说的“我得到了”是什么意思——你之后是如何查看文件的?
0赞 Aram Gevorgyan 9/27/2023
我也尝试了UTF-8,然后我在Notepad ++和Visual Studio中打开了文件,同样
0赞 Jon Skeet 9/27/2023
请提供一个最小的可重现示例,以便我们可以自己尝试一下。但你正在做的很多事情是完全没有必要的。它应该一切正常 - 我的猜测是,当您查看文件时,Notepad++ 或 VS 只是没有正确猜测它是 UTF-8。
1赞 Jon Skeet 9/27/2023
您至少可以展示一个完整的示例,该示例在无法正常工作的 PC 上失败......并在之后提供有关文件中确切内容的详细信息。(例如,您可以读取它,然后用于显示字节。File.ReadAllBytesBitConverter.ToString(byte[])
1赞 Michael Kay 9/27/2023
关注文件中的实际字节/八位字节是什么,而不是它们在屏幕上查看时的显示方式。您需要将这两个问题分开:在文件中获取正确的字节,并在使用各种显示软件查看时正确显示它们。

答: 暂无答案