配置:Windows 8 英文操作系统;JDK1.7;蚀。
我安装了一个中文写的软件,GUI是汉字。但该软件显示丑陋的方形框。我搜索了互联网并找到了修复它的方法。在Win8的控制面板中,将“非Unicode程序的语言”设置为“中文”。
但是在 Eclipse 中编写代码时会出现问题。我们知道 Java 本身使用两个字节的 Unicode 来存储char
和String
. 但是当我执行以下代码时:
import java.util.Arrays;
import java.nio.charset.Charset;
public class CharSetTest {
public static void main(String[] args) throws Exception {
System.out.println(Charset.defaultCharset());
String s = "哈哈";
byte[] b3 = s.getBytes("UTF-8");
System.out.println(b3.length);
System.out.format("%X %X %X\n", b3[0],b3[1],b3[2]);
System.out.println(new String(b3));
byte[] b4 = s.getBytes();
System.out.format("%X %X %X\n", b4[0],b4[1]);
}
}
输出很奇怪:
GBK //default charset is GBK, not Unicode or UTF-8
3 //this is obvious since a Chinese character is encoded into 3 bytes
E5 93 88 //this is corresponding UTF-8 code number
鍝? //something wrong here
B9 FE //I think s.getBytes() should use JAVA's default encode "Unicode", but NOT is this case
几个问题:
- 什么是 Java 默认字符集?是统一码吗?Java 默认字符集如何与程序员交互?例如,如果 Java 使用 Unicode,则字符串“abc”不能编码为其他字符集,因为它们与 Unicode 不同,例如俄罗斯、法国等的字符集,因为它们是完全不同的编码方法。
- 返回什么
Charset.defaultCharset()
?它会返回我的 Windows 8 的默认字符集吗? - 如何
Charset.defaultCharset()
返回GBK?我没有在我的 Windows 8 相关默认字符集中设置任何东西,除了控制面板中的“非 Unicode 程序的语言”。 - 如果我这样在Java中声明一个String:,
String str = "abc";
我不知道charset/encoding的过程。我首先需要通过键盘输入 Java 语句。键盘如何将我的按键转换为 Java Unicode 字符集?String str 存储在我的 .java 源代码文件中。存储 Java 源代码的字符集是什么?
编辑:
为什么我们说“Java 使用 Unicode 来表示字符和字符串”?在我的 Java 程序中,我什么时候应该关心 Unicode 的事情?通常,我只需要关心使用 UTF-8 ISO-8859-1 GBK 等进行编码/解码。但我从不关心 char 和 String 的 Unicode 表示。那么我应该如何以及何时使用 Unicode?