gpt4 book ai didi

java - 为什么我的 Java Charset.defaultCharset() 是 GBK 而不是 Unicode?

转载 作者:行者123 更新时间:2023-12-04 04:57:13 33 4
gpt4 key购买 nike

配置:Windows 8英文操作系统; JDK1.7; eclipse 。

我安装了一个中国人写的软件,GUI是汉字。但该软件用方框显示丑陋。我在互联网上搜索并找到了修复它的方法。在Win8的控制面板中,将“非Unicode程序的语言”设置为“中文”。

但是在 Eclipse 中编写代码时出现问题。我们知道 Java 本身使用两个字节的 Unicode 来存储 charString .但是当我执行以下代码时:

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 默认字符集?是 Unicode 吗? Java如何默认
    字符集与程序员交互?例如,如果 Java 使用 Unicode,
    那么字符串“abc”不能被编码成其他字符集,因为它们
    不同于 Unicode,如俄罗斯、法国等的字符集,
    因为它们是完全不同的编码方法。
  • 什么Charset.defaultCharset()返回?它会返回我的 Windows 8 吗
    默认字符集?
  • 怎么样Charset.defaultCharset()返回GBK?我没有在我的
    Windows 8 相关的默认字符集,除了“language for
    非 Unicode 程序”在控制面板中。
  • 如果我像这样在 Java 中声明一个字符串:String str = "abc"; ,我不
    了解字符集/编码的过程。我首先需要输入
    键盘的 Java 语句。键盘如何翻译我的键
    按钮转换成 Java Unicode 字符集?字符串 str 存储在我的
    .java 源代码文件。存储 Java 源代码的字符集是什么
    代码?


  • 编辑 :
    为什么我们说“Java 使用 Unicode 来表示字符和字符串”?在我的 Java 程序中,我什么时候应该关心 Unicode 的事情?
    通常,我只需要关心使用 UTF-8 ISO-8859-1 GBK 等进行编码/解码。但我从不关心字符和字符串的 Unicode 表示。那么我应该如何以及何时使用 Unicode?

    最佳答案

    Check the doc :“默认字符集是在虚拟机启动期间确定的,通常取决于底层操作系统的区域设置和字符集。”所以不,默认字符集不一定是Unicode。

    在 OpenJDK 中,它由 file.encoding 确定。属性(property)。另见 Setting the default Java character encoding? .

    默认file.encoding使用 * GetUserDefaultLCID() 获取值(在 Windows 上)功能,对应于“区域和语言选项”中的设置。这就是为什么Charset.defaultCharset()正在返回 GBK,因为您将语言环境设置为中文。

    尽管默认字符集取决于操作系统,但编译后的 Java 类中的字符串始终存储为 UTF-16。

    *.java 源代码的编码是您指定给 Java 编译器的任何编码,如果未提供,则使用操作系统的默认编码。见 Java compiler platform file encoding problem .

    *:见http://hg.openjdk.java.net/jdk7/jdk7/jdk/file/tip/src/windows/native/java/lang/java_props_md.c ,第 577 行。

    关于java - 为什么我的 Java Charset.defaultCharset() 是 GBK 而不是 Unicode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16602900/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com