我在c#中编码时遇到了问题
我正在下载一个Windows-1250编码的xml文件,然后将其保存到文件中时,将Š和special等特殊字符替换为?。即使使用Windows-1250编码正确保存了文件。
这是我的代码示例(简体):
var res = Encoding.GetEncoding("Windows-1250").GetBytes(client.DownloadString("http://link/file.xml"));
var result = Encoding.GetEncoding("Windows-1250").GetString(res);
File.AppendAllText("file.xml", result);
该xml文件实际上是使用Windows-1250编码的,当我使用浏览器下载该文件时,它的读取效果就很好。
有人知道这是怎么回事吗?
答案 0 :(得分:0)
问题可能来自两个不同的来源,一个在代码段的开头,另一个在代码段的结尾。
就像已经指出的那样,您在代码中执行的编码和解码实际上是没有用的,因为源(DownloadString
返回)和目标(变量result
)都是C#Unicode字符串。
DownloadString无法正确解码Windows-1250编码的字符串,因为服务器未在Content-Type标头中发送正确的字符集,或者DownloadString
甚至不支持此字符集(不太可能,但我对DownloadString不熟悉)。
该字符串已正确下载,然后在内存中编码为Windows-1250,然后再次解码为Unicode字符串,一切正常。
但是随后它由File.AppendAllText用另一种默认编码编写。 AppendAllText
有一个可选的第三个参数,可用于指定编码。您应该将其设置为Windows-1250才能实际以Windows-1250编码写入文件。
此外,请确保用于打开文件的任何编辑器都使用相同的编码-这通常很难保证,因此我建议您在“对开发人员友好”的编辑器中打开它,以便您指定打开文本文件时的编码。 (Vim,Emacs,Notepad ++,Visual Studio等)。