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的值

时间: 2024-10-12 09:27:15

XML乱码问题和encoding的理解的相关文章

java 乱码问题-Dfile.encoding=UTF-8

http://blog.csdn.net/telnetor/article/details/5555361 问题描述:程序涉及到国际化问题,httpclient抓回来的数据乱七八糟的乱码,在转了几次编码之后在Myeclipse下可以获取正常编码的源码(准确的说是能显示一大部分,少部分内容依然乱码),但是将程序移植到eclipse下先前的程序就出现了乱码(移植工作曾经尝试过以下几种形式:1,程序从myeclipse中导出,然后再从Eclipse中导入:2,将Eclipse工作空间切换到myecli

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;的意思

<?xml version="1.0" encoding="UTF-8" ?> ?xml 这里是申明文件类型,这申明的是XML文件:version="1.0"定义XML文件类型的版本,encoding="UTF-8" 定义XML文件的语言编码.

android反编译查看源码,apk解压后XML乱码解决

1:找了好几个软件都不能图形化的解决反编译,很不舒服,最后找了个还算顺手的,顺便保存下. 2:使用过程 <1> apk转jar apktoolkit工具 <2> 查看jar源码  jd_gui工具 <3> 解决xml乱码问题  AXMLprinter2工具使xml转成txt格式 工具下载地址:

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; 的作用?

version="1.0" 声明用的xml版本是1.0 encoding="UTF-8" 声明用xml传输数据的时候的字符编码,假如文档里面有中文,编码方式不是UTF-8,传输过去再解码的话中文就会是乱码

rapidxml读取utf-8 格式xml乱码问题(utf-8格式转GBK)

1.我是用rapidxml文件读取utf-8格式的xml,但是显示乱码.我们需要把读出来的内容转为GBK格式,则能正常显示. char * utf82gbk(char* strutf) { //utf-8转为Unicode int size = MultiByteToWideChar(CP_UTF8, 0, strutf, -1, NULL, 0); WCHAR   *strUnicode = new   WCHAR[size]; MultiByteToWideChar(CP_UTF8, 0,

打开APK里的AndroidManifest.xml乱码

直接解压apk,打开AndroidManifest.xml显示乱码,因为这里面是二进制字符,和打开文件的编辑器无关.(也可以用ultraedit打开查看,有明文显示.只是看起来搜起来不是很方便而已) 打开APK里的AndroidManifest.xml不乱码:方法一反编译apk:apktool d es.apk F:\tmp\es,反编译后任意编辑工具打开都不乱码 注:apktool可搜索下载,aapt在apktool的压缩包内 直接查看apk内的AndroidManifest.xml: aap

关于html,xhtml,xml三者区别联系和我的理解

HTML和XML:他们两个都是标记语言(ML),一个是超文本置标语言,一个是可扩展置标语言. 他们的不同之处: 1可扩展性:HTML不具备扩展性,而XML是原标记语言,可以用于定义新的标记语言. 2侧重点: HTML侧重于如何表现信息,而XML是侧重于如何结构化的描述信息. 3语法要求: HTML不要求标记的嵌套,配对等,不要求标记间具有一定的顺序,而XML则是严格要求嵌套,配对,遵循DTD的树形结构. 4可读性和维护性:HTML难于阅读维护,而XML结构清晰,便于阅读维护 5数据和显示关系:H

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

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

从XML文件乱码问题,探寻其背后的原理

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