出现应用程序读取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文件乱码问题,探寻其背后的原理的更多相关文章

  1. 从XML文件乱码问题,探寻其背后的原理(转)

    由于网友反应本文图片不能显示,由于时间关系未能及时修正.请访问原文地址: 本文出自http://blog.csdn.net/dinglang_2009/article/details/6895355, ...

  2. 从XML文件乱码问题,探寻其背后的原理 (ZHUAN)

    出现应用程序读取XML文件乱码的场景: 加入xml文件以<?xml version="1.0" encoding="utf-8" ?> 格式的:如果 ...

  3. 服务器上build.xml文件乱码解决(亲测有效)

    前提条件:必须root账户登录系统,否则无权限 1. 修改/etc/sysconfig/i18n: 拷贝如下内容到文件中 #LANG="zh_CN.UTF-8" LANG=&quo ...

  4. Cocos2d-x解析XML文件,解决中文乱码

    身处大天朝,必须学会的一项技能就是解决中文显示问题.这个字符问题还搞了我一天,以下是个人解决乱码问题的实践结果,希望可以给其他人一些帮助 读取xml文件代码: CCDictionary* messag ...

  5. Word文件乱码XML

    文章介绍 一个朋友写的文档因为异常关机,导致全部文件变成了xml的乱码,正好帮他解决了,感觉这些或许有些帮助,就先记录下来了. 破损文件介绍 文件破坏之后,打开全是xml格式的文档,结构如下. 恢复过 ...

  6. SSH项目web.xml文件的常用配置【struts2的过滤器、spring监听器、解决Hibernate延迟加载问题的过滤器、解决中文乱码的过滤器】

    配置web.xml(struts2的过滤器.spring监听器.解决Hibernate延迟加载问题的过滤器.解决中文乱码的过滤器) <!-- 解决中文乱码问题 --> <filter ...

  7. 【Java EE 学习 35 上】【strus2】【类型转换器】【struts2和Servlet API解耦】【国际化问题】【资源文件乱码问题已经解决】

    一.类型转换器 1.在动作类action中,声明和表单中name属性的值同名的属性,提供get和set方法,struts2就可以通过反射机制,从页面中获取对应的内容 package com.kdyzm ...

  8. android 查看解压后的.xml文件代码(axmlprinter2)

    axmlprinter2工具下载地址:http://pan.baidu.com/s/1o67eXtS 方法:1.将要查看的.xml文件复制到AXMLPrinter2.jar所在目录2.通过cmd 输入 ...

  9. 【JAVA使用XPath、DOM4J解析XML文件,实现对XML文件的CRUD操作】

    一.简介 1.使用XPath可以快速精确定位指定的节点,以实现对XML文件的CRUD操作. 2.去网上下载一个“XPath帮助文档”,以便于查看语法等详细信息,最好是那种有很多实例的那种. 3.学习X ...

随机推荐

  1. SGU 193.Chinese Girls' Amusement

    /* 实际上就是求一个k,满足k<=n/2,且gcd(n,k)=1 如果n为奇数,k为[n/2] 如果n为偶数,k=n/2-1-(n/2)%2 */ #include <iostream& ...

  2. JS判断终端(Android IOS)

    function getMobileOperatingSystem() { var userAgent = navigator.userAgent || navigator.vendor || win ...

  3. centos中文乱码修改字符编码使用centos支持中文

    如何你的centos显示中文乱码,只要修改字符编码使centos支持中文就可以了,没有这个文件可以创建它,下面是修改步骤 一.中文支持 安装中文语言包: 复制代码 代码如下: yum groupins ...

  4. truncate 命令删除恢复

    truncate命令可以一次性删除当前表中所有记录并且不留任何日志,同时这个表的ID就自动初化从1开始,今天我就来给大家尝试一个利用truncate清除记录之后恢复过程. 实际线上的场景比较复杂,当时 ...

  5. oracle常见为题汇总,以及一个简单数据连接操作工厂

    本人软件环境:win8.1 64位操作系统,vs2013,安装好了与oracle数据库对应的客户端         连接oracle数据库.以及操作数据库 1.使用IIS建立网站,浏览网页时候,提示“ ...

  6. bzoj3639: Query on a tree VII

    Description You are given a tree (an acyclic undirected connected graph) with n nodes. The tree node ...

  7. 使用 Scut 搭建通服架构

    整体通服的架构图如下: 整体思路: 尽量将公共的业务逻辑分拆到单个业务服务器: 公共业务RDB读写分离,提高IO并发量: 角色简要信息.角色战斗信息修改后将ID压入修改队列,简要信息每3分钟通知同步一 ...

  8. 【转载】之 破解 (【原创】Xenocode Postbuild 2009 加壳破解 (不断更新中...))

    声明 本文转载,感谢原作者dotNetSafe分享 [原创]Xenocode Postbuild 2009 加壳破解 (不断更新中...) http://bbs.pediy.com/showthrea ...

  9. [BZOJ 3626] [LNOI2014] LCA 【树链剖分 + 离线 + 差分询问】

    题目链接: BZOJ - 3626 题目分析 考虑这样的等价问题,如果我们把一个点 x 到 Root 的路径上每个点的权值赋为 1 ,其余点的权值为 0,那么从 LCA(x, y) 的 Depth 就 ...

  10. codeforces C. Mashmokh and Numbers

    题意:给你n和k,然后让你找出n个数使得gcd(a1,a2)+gcd(a3,a4)+......的和等于k: 思路:如果n为奇数,让前n-3个数的相邻两个数都为1,n-2和n-1两个数gcd为k-an ...