XML乱码问题和encoding的理解

文件编码


文件编码也称为字符编码,用于指定在处理文本时如何表示字符。一种编码可能优于另一种编码主要取决于它能处理或不能处理哪些语言字符,不过通常首选的是 Unicode。
读取或写入文件时,未正确匹配文件编码的情况可能会导致发生异常或产生不正确的结果。

编码类型


处理文件时,Unicode 是首选编码。Unicode 是全球范围的字符编码标准,该标准使用 16 位代码值来表示现代计算中使用的所有字符,包括印刷中使用的技术符号和特殊字符。


encoding属性和文件格式的关系


我以前理解的是xml里的encoding定义的编码必须与文件格式相匹配。即<? xml encoding="utf-8"  ?>,那么,文件格式必须是一个utf-8文件。encoding的值必须和文件格式(即BOM,BOM就是 byte order mark的缩写)相匹配,不然在解析XML时,可能会出现乱码,但是实际不是这样的。

W3C定义了三条XML解析器如何正确读取XML文件的编码的规则:
 1.如果文挡有BOM(字节顺序标记,一般来说,如果保存为unicode格式,则包含BOM,ANSI则无),就定义了文件编码(另存为文件时,选择的编码格式)。
 2.如果没有BOM,就查看XML encoding声明的编码属性。
 3.如果上述两个都没有,就假定XML文挡采用UTF-8编码

有了这三条规则,那这个规则就清楚多了。

首先,XML解析器根据文件的BOM(文件存储格式)来解析文件;如果没找到BOM,由用XML里的encoding属性指定的编码;如果xml里encoding没指定的话,就默认用utf-8来解析文档。然后又可以推出,BOM和ENCODING都有的话,则以BOM指定的为准。


结论


结论是:编码属性应当被指定为文档被保存时所使用的编码。
我最好的避免错误的建议是:
使用支持编码的编辑器,如Editplus
确定编辑器使用的编码(一般是可以查看和修改的)
在您的 XML 文档中使用相同的编码属性,即encoding的值

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用VS2019解析XML时出现乱码问题,可以尝试以下几种方法解决: 1. 确保XML文件的编码格式正确,可以在创建Reader对象时指定编码格式,例如设置为utf-8:reader.setEncoding("utf-8")。这样可以防止乱码问题的发生。 2. 检查XML文件本身的编码格式,确保它与解析时指定的编码格式一致。可以使用文本编辑器打开XML文件,查看文件头部是否指定了正确的编码格式。 3. 如果XML文件的编码格式是GBK,而解析时指定的是utf-8,可以尝试将XML文件的编码格式转换为utf-8。可以使用文本编辑器打开XML文件,将其另存为utf-8格式。 4. 确保在解析XML之前,读取XML文件的内容时使用了正确的编码格式。可以在读取XML文件时指定编码格式,例如使用StreamReader类的构造函数:StreamReader reader = new StreamReader("文件路径", Encoding.UTF8)。 5. 如果以上方法都无效,可以尝试使用其他的XML解析库或工具进行解析,以确定是否是解析库本身的问题。 请根据具体情况选择适合的方法来解决乱码问题。<span class="em">1</span> #### 引用[.reference_title] - *1* [java 解析XML 乱码](https://blog.csdn.net/qq_43684538/article/details/103850322)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值