1. java 文件的字符编码是文件保存时的字符集编码 (UTF-8, EUC_JP, Shift_JIS ...)
2. class 文件的字符编码使用 Unicode 字符集 (UTF-8 编码)
Javac 编译时是以系统默认编码读入 .java 文件, 按 Unicode 进行编码
javac 可以指定按某种编码进行编译 (javac -encoding EUC_JP)
3. Java 程序在内存中是使用 Unicode 字符集, 具体编码方案未知 (不重要 ???)
Java 程序中的字符串, 不仅局限于从 class 代码中直接加载而来的字符串, 还有是从文本文件或数据库读取, 还有可能是从字节数组构建的, 然而他们基本上都不是 Unicode 编码的, 原因很简单, 存储优化. 因此就需要处理各种各样的编码问题, 在处理之前, 必须明确 "源" 的编码, 然后用指定的编码方式正确读取到内存中
getBytes(String charsetName)
String(byte[] bytes, String charsetName)
4. JVM 内部是使用系统默认编码
运行于linux 平台上的 JVM 会读取 /etc/sysconfig/i18n 中的参数来决定输入输出流的编码方式
System.out.print(Charset.defaultCharset());
System.out.print(System.getProperty("file.encoding")); // 可通过 java -Dfile.encoding=utf-8 Hello 来改变
0 件のコメント:
コメントを投稿