从XML文件乱码问题,探寻其背后的原理
出现应用程序读取XML文件乱码的场景:
加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的;如果对xml文件进行修改了,其中包含中文字符的内容,另存为其他格式化时(比如unicod,ANSI)等等格式,则新保存的配置文件,程序读取时候将会出现乱码,不能正常的读取。
验证如下方法:
(1)、可以将XML文件拖放在IE浏览器上,会出现XML文件无法正常的在浏览器上面渲染。
(2)、通过Visual studio 打开该XML文件,会出现加载格式错误!




参看地址:http://blog.csdn.net/dinglang_2009/article/details/6895355
在日常开发工作中,我们经常会使用到XML,早已成为了一种标准。它的用途非常的广泛,但这些不是本文所重点讨论的。
相信大家在做开始时候经常碰到过“乱码”的问题,这是中国程序员非常头疼的问题。我一直很想深入研究关于“编码”的原理,无奈水平有限,那些枯燥的理论(二进制,ASCII,Unicode,UTF-8,gb2312,ISO ...光这些就让我看的两眼发黑了),实在看不下去,也很难真正搞懂搞明白。望各位网友多指点......
我将用工作中遇到的一个“XML文件乱码”的简单问题,解决问题,分析其背后的原理。
首先,我们在本地新建一个文本文件,将后缀名改为".XML”, 然后用用记事本打开,往里面添加一些符合XML文档规范的内容。如图所示:

写好之后,按“ctrl+s”保存,然后使用IE浏览器打开该XML文件,验证该XML文档的规范及正确性。不料,居然解析出错了,如下:

这是咋回事呢?我的XML文档定义的格式好像没问题啊。无效字符?这肯定是典型的“编码”问题了。聪明的我第一就想到了,调整IE浏览器的“编码”嘛。
可是打开“查看”“编码”,发现那些编码格式全是灰色的,好像不能选择哦。这是因为,在定义XML文档的时候,指定了编码格式为"UTF-8",这就相当于告诉了浏览器(XML解析引擎):你必须使用"UTF-8"编码去解析我,所以无法使用其他的编码格式去查看了。
这是因为,我们在使用记事本保存该文档的时候,没有选择编码格式,默认使用的是操作系统编码(中文版的系统),也就是对应的"GB2312”编码。当我们的IE浏览器,再使用我们指定的UTF-8编码去解析该XML文档的时候,出现了乱码,所以造成了上面的错误。(Windows中的文件保存在硬盘上,默认使用操作系统编码。比如我们XML文档中定义的“中国”这两个字,保存好后,假如其对应的GB2312可能是"10001",而在UTF-8编码中的,“10001”对应的就不是“中国”了,要么找不到,要么是乱码,所以IE就拒绝显示了)。那我们应该怎么办呢?有两种办法可以解决。
第一,我们在xml文档定义时,指定其编码为gb2312,如下图所示:

保存之后,我们再使用IE浏览器打开,结果如图:

恭喜,这个问题解决了。但是这种方法不推荐使用。因为我们在定义XML文档时候,为了文档的通用性,我们一般使用UTF-8编码。
第二种方法:
我们再用记事本打开该文档,点击“另存为”,发现下面会有“编码”选项,选择“UTF-8”之后再试。
其实,我们在使用诸如 Eclipse 或者Microsoft Visual Studio之类的开发工具来定义XML文档,并不会碰到上面的问题。原因是这些IDE都非常“聪明”,你的XML文档指定的是那种编码格式,IDE在将XML文档保存到硬盘的时候,就自动使用那种格式。所以,很多局限于使用某种IDE开发的程序员,其实并不明白这些知识及其背后的原理,但他们做开发起来一样很顺手。早年据笔者了解,国内有很多大牛,写代码都是用EditPlus之类的文本编辑器,而那些在Linux/unix上面的大牛,很多都是用VI/VIM来编码。大概这就是差距吧。(呵呵。当然这不是本文讨论的重点)
从XML文件乱码问题,探寻其背后的原理的更多相关文章
- 从XML文件乱码问题,探寻其背后的原理(转)
由于网友反应本文图片不能显示,由于时间关系未能及时修正.请访问原文地址: 本文出自http://blog.csdn.net/dinglang_2009/article/details/6895355, ...
- 从XML文件乱码问题,探寻其背后的原理 (ZHUAN)
出现应用程序读取XML文件乱码的场景: 加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的:如果 ...
- 服务器上build.xml文件乱码解决(亲测有效)
前提条件:必须root账户登录系统,否则无权限 1. 修改/etc/sysconfig/i18n: 拷贝如下内容到文件中 #LANG="zh_CN.UTF-8" LANG=&quo ...
- Cocos2d-x解析XML文件,解决中文乱码
身处大天朝,必须学会的一项技能就是解决中文显示问题.这个字符问题还搞了我一天,以下是个人解决乱码问题的实践结果,希望可以给其他人一些帮助 读取xml文件代码: CCDictionary* messag ...
- Word文件乱码XML
文章介绍 一个朋友写的文档因为异常关机,导致全部文件变成了xml的乱码,正好帮他解决了,感觉这些或许有些帮助,就先记录下来了. 破损文件介绍 文件破坏之后,打开全是xml格式的文档,结构如下. 恢复过 ...
- SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】
配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter ...
- 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】
一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...
- android 查看解压后的.xml文件代码(axmlprinter2)
axmlprinter2工具下载地址:http://pan.baidu.com/s/1o67eXtS 方法:1.将要查看的.xml文件复制到AXMLPrinter2.jar所在目录2.通过cmd 输入 ...
- 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】
一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...
随机推荐
- cocos2dx解析lua table数据结构 简易版.
之前一直用xml填配置, cocos2dx自带了xml解析接口, 非常方便. 但是, 接口好用也改变不了xml的结构字符太多, 书写麻烦, 乱七八糟的事实. 很早就想换lua, 无奈引擎没有现成接口, ...
- Getopt::Long 模块的简单使用
用法简介 1.带值参数传入程序内部 ※参数类型:整数, 浮点数, 字串 GetOptions( 'tag=s' => \$tag ); ‘=’表示此参数一定要有参数值, 若改用’:'代替表示参数 ...
- yzoi1777倒水问题的详细解法
Description - 问题描述 x.y.z三个容器,其最大容量分别是xMAX升.yMAX升.zMAX升,这里规定100>xMAX>yMAX>zMAX.一开始x是装满了水的,现在 ...
- select控件变成可输入状态
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- python类class基础
44.class类: 一.类定义的一般形式: 1.简单的形式:实例化对象没有自己独有 ...
- Android 之夜间模式(多主题)的实现
引言 夜间模式其实属于多主题切换的一种,不过是最麻烦的一种.因为在夜间模式下不仅要切换主色调,次要色调等等,还要覆盖一些特殊的颜色,因为在夜间模式下总不能什么都是黑的把,那不得丑死-.-,所以当你夜间 ...
- A题 - A + B Problem
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description Cal ...
- 分布式系统间通信之RPC的基本概念(六)
RPC(Remote Procedure Call Protocol)远程过程调用协议.一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象 ...
- NameNode元数据的管理机制(三)
元数据的管理: 第一步:客户端通过DistributedFilesystem 对象中的creat()方法来创建文件,此时,RPC会 通过一个RPC链接协议来调用namenode,并在命名空间中创建一个 ...
- Infinite Scroll–无限分页
一.前言 现在有很多网站都有这样的交互 1.当你往下浏览页面时,页面会自动去异步加载数据. 无限分页效果 infinite scroll 效果图 –ifxoxo.com 2.在页面下方有一个“点击加载 ...