本文转自 http://www.blogjava.net/zhenandaci/archive/2008/12/24/248062.html
接着上节的思路说,一个网页要想在浏览器中能够正确显示,需要在三个地方保持编码的一致:网页文件,网页编码声明和浏览器编码设置。
首先是网页文件本身的编码,即网页文件在被创建的时候使用什么编码来保存。这个完全取决于创建该网页的人员使用了什么编码保存,而进一步的取决于该人员使用的操作系统。例如我们使用的中文版WindowsXP系统,当你新建一个文本文件,写入一些内容,并按下ctrl+s进行保存的那一刻,操作系统就替你使用GBK编码将文件进行了保存(没有使用UTF-8,也没有使用UTF-16)。而使用了英文系统的人,系统会使用ISO-8859-1进行保存,这也意味着,在英文系统的文件中如果输入一个汉字,是无法进行保存的(当然,你甚至都无法输入)。
一个在创建XML文件时(创建HTML的时候倒很少有人这么做)常见的误解是以为只要在页面的encoding部分声明了UTF-8,则文件就会被保存为UTF-8格式。这实在是……怎么说呢,不能埋怨大家。实际上XML文件中encoding部分与HTML文件中的charset中一样,只是告诉“别人”(这个别人可能是浏览你的页面的人,可能是浏览器,也可能是处理你页面的程序,别人需要知道这个,因为除非你告诉他们,否则谁也猜不出你用了什么编码,仅通过文件的内容判断不出使用了什么编码,这是真的)这个文件使用了什么编码,唯独操作系统不会搭理,它仍然会按自己默认的编码方式保存文件(再一次的,在我们的中文WindowsXP系统中,使用GBK保存)。至于这个文件是不是真的是encoding或者charset所声明的那种编码保存的呢?答案是不一定!
例如新浪的页面就“声称”他是用GB2312编码保存的,但实际上却是GBK,也有无数的二把刀程序员用系统默认的GBK保存了他们的XML文件,却在他们的encoding中信誓旦旦的说是UTF-8的。
这就是我们所说的第二个位置,网页编码声明中的编码应该与网页文件保存时使用的编码一致。
而浏览器的编码设置实际上并不严格,就像我们第三节所说的那样,在浏览器中选择使用GB2312来查看,它实际上仍然会使用GBK进行。而且浏览器还有这样一种好习惯,即它会尽量猜测使用什么编码查看最合适。
我要重申的是,网页文件的编码和网页文件中声明的编码保持一致,这是一个极好的建议(值得遵循,会与人方便,与己方便),但如果不一致,只要网页文件的编码与浏览器的编码设置一致,也是可以正确显示的。
例如有这样一个页面,它使用GBK保存,但声明自己是UTF-8的。这个时候用浏览器打开它,首先会看到乱码,因为这个页面“告诉”浏览器用UTF-8显示,浏览器会很尊重这个提示,于是乱码一片。但当手工把浏览器设为GBK之后,显示正常。
说了以上四节这么多,后面我们就来侃侃Java里的字符编码,你会发现有意思且挠头的事情很多,但一旦弄通,天下无敌(不过不要像东方不败那样才好)。
相关推荐
### Java中的字符集编码入门(五):Java代码中的字符编码转换Part1 #### 核心知识点概述: 本文档深入探讨了Java编程语言中字符集编码的基础知识,并着重讲解了字符编码转换的基本原理及其在Java代码中的应用。...
《编码——隐匿在计算机背后的软硬件语言》是一本深入浅出介绍计算机基础知识的书籍,非常适合初学者。这本书旨在帮助读者理解计算机系统的工作原理,包括软件和硬件如何协同工作,以及编码过程中的各种奥秘。以下是...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
- 在开发过程中确保使用的字体支持中文字符集。 - 对于界面上的文字显示,应采用适合中文显示的字体设置。 - 在编写代码时,处理字符串时要注意使用Unicode编码,以确保中文字符能够正确处理。 #### Lightweight ...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境...
本教程"JavaWeb开发教程——入门与提高篇"旨在为初学者提供一个全面的学习路径,同时也为有一定基础的开发者提供进阶知识。教程包含了PDF课件和源码,使学习者能够理论结合实践,更深入地理解JavaWeb开发的核心概念...
Java目录监视器源程序 9个目标文件 内容索引:JAVA源码,综合应用,目录监视 用JAVA开发的一个小型的目录监视系统,系统会每5秒自动扫描一次需要监视的目录,可以用来监视目录中文件大小及文件增减数目的变化。 Java...
- **文档结构**:HTML文档由头部和主体两部分组成,头部包含元信息(如标题、字符集等),主体则是可见内容。 - **标签**:HTML通过一系列标签来定义内容的意义和结构。例如,`<p>`表示段落,`<img>`表示图片等。 - ...
同时,确保数据库连接配置也使用UTF-8编码,例如在MySQL中,可以设置数据库字符集为`character_set_server=utf8mb4`,并且在建立数据表时指定`CHARACTER SET utf8mb4`。 在MyEclipse环境中,创建Web项目时,应选择...
032004_【第20章:Java新IO】_字符集笔记.pdf 032005_【第20章:Java新IO】_Selector笔记.pdf 042101_【课程讲解】_附录:Eclipse开发工具笔记.pdf 050101_〖开发实例〗_Java开发实例讲解(人员管理)笔记.pdf
boolean类型只有true和false两个值,而char类型则采用Unicode编码,每个字符占用两个字节,可以表示更广泛的字符集。 总的来说,《Java基础教程-李兴华》提供了一个全面且深入的Java入门指南,涵盖了从语言起源、...
DOCTYPE html>声明文档类型,作为根元素,包含元信息如字符集,定义网页标题,则包含实际的网页内容。 最后,简要提到了HTML的一些常见标签,如到的标题标签,它们分别表示不同级别的标题,便于组织网页内容。 总...
- **转换流**:用于转换字符集。 - **数据流与打印流**:处理基本数据类型的流和打印格式化的文本。 - **对象流**:用于序列化和反序列化对象。 - **随机存取文件流**:支持随机访问文件内容的流。 - **ZIP文件流**...
Ivor Horton还著有Beginning Visual C++ 6、Beginning C Programming和Beginning Java 2等多部入门级好书。 目录 封面 -18 前言 -14 目录 -9 第1章 使用Visual C++ 2005编程 1 1.1 .NET Framework 1 1.2 CLR 2...
- **SQL 语句硬编码**: SQL 语句直接写入 Java 代码中,导致维护困难。一旦 SQL 需要变更,必须重新编译并部署代码。 - **结果集处理重复**: 对于结果集的处理往往需要写大量的重复代码,尤其是在将结果转换为 Java ...
- `<%@ page %>`: 用于设置JSP页面的属性,如语言、字符集、错误页等。 - `<%@ include %>`: 用于在页面编译时将另一个文件包含进来。 - `<%@ taglib %>`: 引入自定义标签库。 3. **脚本元素(Scriptlets)**:...
配置是指设置FreeMarker的一些基本选项,如模板的加载路径、字符集编码等。 **3.2 共享变量** 共享变量是在多个模板之间共享的数据。 **3.3 配置信息** 配置信息包括模板的加载方式、错误处理机制等。 **3.4 ...
例如,`<%@ page %>`指令现在可以声明页面的导入包,指定字符集,以及是否启用EL等。 4. **脚本元素的分离**:JSP2.0推崇“分离关注点”的原则,鼓励将Java代码从HTML中分离出来,这样使得代码更加清晰,易于维护。...