XML反序列化时特殊字符显示为�,如何解决该编码问题
XML反序列化特殊字符显示乱码(�)的解决方法
问题背景
我遇到了一个XML反序列化的乱码问题:手里的XML文件声明了UTF-8编码,但里面包含ö、ä这类特殊字符:
<?xml version="1.0" encoding="UTF-8"?> <students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <student name="Adnand"/> <student name="özil"/> <student name="ärnold"/> </students>
我用下面的C#代码进行反序列化,过程没有报错,但结果里的特殊字符全部变成了�:
public void readXML(string path) { XmlSerializer deserializer = new XmlSerializer(typeof(Students)); TextReader reader = new StreamReader(path); object obj = deserializer.Deserialize(reader); Students myStudents = (Students)obj; }
尝试过修改编码类型但没效果,有没有可行的解决办法?
解决方案
亲测有效的解决方式是在初始化StreamReader时显式指定Encoding.Default,修改后的代码如下:
public void readXML(string path) { XmlSerializer deserializer = new XmlSerializer(typeof(Students)); TextReader reader = new StreamReader(path, Encoding.Default); object obj = deserializer.Deserialize(reader); Students myStudents = (Students)obj; }
Encoding.Default会采用系统当前的ANSI编码,能正确识别并解析这些特殊字符,从而解决乱码问题。
内容的提问来源于stack exchange,提问作者Adnand
相关产品推荐
相关产品推荐

