IT Notes‎ > ‎Java‎ > ‎Java Language‎ > ‎

Java 代码的诸编码

@draft
在非英语场景编程, 必然遇到编码问题.

Java 诸编码

有两个地方可能会让人困惑, 一个是 Java 源文件存储的编码, 另一个是 Java 源代码中文字(char和字符串)的编码. Java 源代码本质上是纯文本文件, 可以用 ANSI, GBK, UTF-8 等多种编码方式存储, 而源代码内部使用字符串同样可以以多种方式编码. 要在使用时不出现乱码, 是需要一些讲究的。

在将 Java 文本用 UTF-8 保存是,注意不要带 BOM 信息,否者 javac 编译时会报错。

(本段为20090730心得) Java 源代码的编码是可以任意选择的, 但如果和系统平台不一致, 那么 compile 的时候, 就要带上参数制定和最初保存时一样的编码. 如 HelloWorld.java 以 UTF-8 编码存放, 而系统默认编码是 GBK, 那么编译的时候, 应该用命令行: javac -encoding UTF-8 HelloWorld.java.  GB2312 和 BIG5 都有个特点, 本质上就是 ASCII 码堆叠, 但两位一组(或big5有不同)进行识别而已, 所以源代码是 GB2312 存放, 但使用 BIG5 编译, 是不会报错的, 但运行时候, 中文就乱码了, 反之亦然. 而如果用 UTF-8 存放源代码, 而使用 GB2312 or BIG5 编译, 那就要报错了. 无论 Java 源代码使用什么编码存放, 一旦编译, class 文件都是 UTF-8 编码的, 和操作系统平台无关.

Java 中的一个字符型 char 实例, 是一个 Unicode 字符. Java中, class 文件本身采用 UTF-8 的编码方式, JVM 运行时采用 UTF-16, Java的字符串是永远都是 Unicode 的,采用的是 UTF-16 的编码方式.

验证方式, 可以考虑分别用文本工具写好代码, 分别用几种不同的编码保存, 编译运行查看结果.

这里有一份写的更好的文档: http://blog.iamzsx.me/show.html?id=80001

JSP 的诸编码

@draft 关于编码有两处地方,是怎么区分的?

比如一个 HTML 文件本身用 GBK 编码保存,但页面中的内容宣称是 UTF 的。这是怎么回事?
有关文件保存的编码和文件内容的编码。
http://www.javaworld.com.tw/jute/post/view?bid=6&id=261373&sty=1
http://topic.csdn.net/u/20090626/06/c4fd99ca-5f6d-436c-aaba-540457d9282a.html

有关Java字节字符流相关的内容, 需要整理这份文档.
有关Java char & String的相关内容, 可以参考这份文档.

Eclipse 设置

Eclipse 中设置默认编码:
Window -> Preferences -> General -> Content Types
Window -> Preferences -> Editors -> Text Editors -> Spelling -> Encoding
Window -> Preferences -> Workspace -> Text file encoding //Java 工程用的字符集
Window -> Preferences -> Web -> {CSS Files, HTML Files, JSP Files}

# 设置 Eclipse 默认字符集和 New text file line delimiter
window-->prefrences -->general -->workspace
参考链接:http://www.javaeye.com/topic/31930




Comments