gpt4 book ai didi

c# - 读取 XML 时出现奇怪的 UTF-8 编码问题,在 C# 中写入结果

转载 作者:太空宇宙 更新时间:2023-11-03 22:17:51 24 4
gpt4 key购买 nike

我在使用一个简单的 C# 程序时遇到问题,该程序旨在从 Web 读取 XML 文档,提取一些元素,然后将这些元素的内容写入 HTML 文件(在一个简单的表格中)。尽管 XML 文档被正确编码为 UTF-8,但最终,我生成的所有 HTML 文件都无法正确转录非西方英语字符(例如,解析日语时类似“Wingdings”的输出)。

由于 XML 文件非常大,该程序的工作方式是让 XmlReader 在遇到匹配元素时生成匹配元素,然后使用 StreamWriter 将这些元素写入 HTML 文件。

有没有人知道在像这样的程序中,UTF-8 编码可能必须明确强制的什么地方?

最佳答案

简短说明

我在这里猜测:您的浏览器正在使用错误的字符编码显示页面。

您需要回答:您的浏览器认为 HTML 是什么字符编码? (我打赌它不是 UTF-8。)

尝试调整您的浏览器:例如,在 Firefox 中,这是查看 → 字符编码,然后选择与您的文档匹配的字符编码。

因为你似乎有一个非常多语言的文档,让你的 C# 输出为 UTF-8 - 它支持人类已知的每个字符,包括日语、中文、拉丁语等。然后尝试告诉 Firefox、IE 等,以使用UTF-8。您的文档应该会显示。

如果这是问题所在,您需要将文档的编码告知浏览器。通过 ( see this ) 这样做:

  • 让您的网络服务器返回 HTTP header 中的字符编码。
  • <meta> 中指定字符编码标签。
  • 在 XHTML 的 XML 序言中指定字符编码。

你做的越多越好。


详细解释

让我们来看看您提到的几件事:

using (StreamWriter sw = new StreamWriter(outputFile,true,System.Text.Encoding.UTF8))

found that using Text.Encoding.Default made other Western character sets with accents work (Spanish accents, German umlauts), although Japanese still exhibits problems.

我要冒险说你是美国计算机用户。因此,对于您来说,Windows 上的“默认”编码可能是 Windows-1252。如果 Web 浏览器无法检测到 HTML 文档上的编码,则它使用的默认编码是 ISO-8859-1。 ISO-8859-1 和 Windows-1252 非常相似,它们都显示 ASCII 加上一些常见的拉丁字符,如 é、è 等。更重要的是,重音字符的编码相同,所以,对于这些字符,两种编码都将解码相同的数据。因此,当您切换到“默认”时,浏览器会正确解码您的拉丁字符,尽管编码错误。日语在 ISO-8859-1 或 Windows-1252 中都不存在,这两者都会导致日语只是作为随机字符出现。 (“莫吉贝克”)

您注意到切换到“默认”修复了一些带重音的拉丁字符这一事实告诉我您的浏览器正在使用 ISO-8859-1,这不是我们想要的:我们想使用 UTF 对文本进行编码-8,我们需要浏览器这样读回它。请参阅有关如何执行此操作的简短说明。

关于c# - 读取 XML 时出现奇怪的 UTF-8 编码问题,在 C# 中写入结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4390166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com