Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 读取XML时奇怪的UTF-8编码问题,在C中写入结果_C#_Xml_Utf 8_Character Encoding - Fatal编程技术网

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

C# 读取XML时奇怪的UTF-8编码问题,在C中写入结果,c#,xml,utf-8,character-encoding,C#,Xml,Utf 8,Character Encoding,我对一个简单的C程序有一个问题,这个程序打算从web读取XML文档,提取一些元素,然后将这些元素的内容写入一个简单表中的HTML文件。虽然XML文档被正确编码为UTF-8,但最终,我生成的所有HTML文件都无法正确转录非西方英语字符,例如解析日语时的Wingdings类输出 由于XML文件非常大,程序的工作原理是让XmlReader在遇到匹配元素时生成匹配元素,然后使用StreamWriter将匹配元素写入HTML文件 有没有人知道在这样的程序中,UTF-8编码可能必须明确强制执行在哪里?简短的

我对一个简单的C程序有一个问题,这个程序打算从web读取XML文档,提取一些元素,然后将这些元素的内容写入一个简单表中的HTML文件。虽然XML文档被正确编码为UTF-8,但最终,我生成的所有HTML文件都无法正确转录非西方英语字符,例如解析日语时的Wingdings类输出

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

有没有人知道在这样的程序中,UTF-8编码可能必须明确强制执行在哪里?

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

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

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

既然你有一个非常多语言的文档,那么就用UTF-8输出你的C语言,它支持人类已知的所有字符,包括日语、汉语、拉丁语等。然后试着告诉Firefox,IE,随便什么,使用UTF-8。您的文档应该显示

如果这是问题所在,则需要通知浏览器文档的编码。通过以下方式实现:

让web服务器返回HTTP头中的字符编码。 在标记中指定字符编码。 在XHTML的XML前言中指定字符编码。 你做的越多,越开心

冗长的解释 让我们看看你提到的几件事:


使用StreamWriter sw=new StreamWriteroutputFile,true,System.Text.Encoding.UTF8

发现使用Text.Encoding.Default可以使其他带有重音的西方字符集与西班牙语重音、德语umlauts兼容,尽管日语仍然存在问题

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

您注意到,切换到默认值修复了一些重音拉丁字符,这告诉我您的浏览器使用的是ISO-8859-1,这不是我们想要的:我们希望使用UTF-8对文本进行编码,我们需要浏览器将其读回。有关如何操作,请参见简短的说明。

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

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

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

既然你有一个非常多语言的文档,那么就用UTF-8输出你的C语言,它支持人类已知的所有字符,包括日语、汉语、拉丁语等。然后试着告诉Firefox,IE,随便什么,使用UTF-8。您的文档应该显示

如果这是问题所在,则需要通知浏览器文档的编码。通过以下方式实现:

让web服务器返回HTTP头中的字符编码。 在标记中指定字符编码。 在XHTML的XML前言中指定字符编码。 你做的越多,越开心

冗长的解释 让我们看看你提到的几件事:


使用StreamWriter sw=new StreamWriteroutputFile,true,System.Text.Encoding.UTF8

发现使用Text.Encoding.Default可以使其他带有重音的西方字符集与西班牙语重音、德语umlauts兼容,尽管日语仍然存在问题

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


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

共享创建StreamWriter以保存HTML的代码部分。使用StreamWriter sw=new StreamWriteroutputFile,true,System.Text.Encoding.UTF8I发现使用Text.Encoding.Default可使其他带有重音的西方字符集工作西班牙语重音、德语umlauts,尽管日本人仍然表现出问题。我假设这意味着问题在于如何指定文字。您用于查看HTML的字体或编辑器是否支持所有unicode字符?你的输出HTML文档是否有正确的BOM表?好吧,我在编写HTML标记时并没有指定任何特定的字体,我正在查看Firefox、IE和Chrome中显示相同问题的页面。在没有安装日文字符的XP机器上,由于某种原因,即使这些字符可以在浏览器和其他开发平台(如Python)中正确显示,也无法进行这种转录,这是否可能?不熟悉BOM。共享创建StreamWriter以保存HTML的代码部分。使用StreamWriter sw=new StreamWriteroutputFile,true,System.Text.Encoding.UTF8I发现使用Text.Encoding.Default可以使其他带有重音的西方字符集与西班牙语重音、德语umlauts兼容,尽管日语仍然存在问题。我假设这意味着问题在于如何指定文字。您用于查看HTML的字体或编辑器是否支持所有unicode字符?你的输出HTML文档是否有正确的BOM表?好吧,我在编写HTML标记时并没有指定任何特定的字体,我正在查看Firefox、IE和Chrome中显示相同问题的页面。在没有安装日文字符的XP机器上,由于某种原因,即使这些字符可以在浏览器和其他开发平台(如Python)中正确显示,也无法进行这种转录,这是否可能?不熟悉BOM。非常感谢您的详细解释-这正是问题所在。我觉得强制使用UTF-8是个诀窍,只是没想到也要检查一下浏览器。duh。非常感谢您的详细解释-这正是问题所在。我觉得强制使用UTF-8是个诀窍,只是没想到还要检查浏览器。