4

考虑以下程序。

import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.Charset;

public class HelloWorld {

    public static void main(String[] args)  {       
        System.out.println(Charset.defaultCharset());
        char[] array = new char[3];
        array[0] = '\u0905';
        array[1] = '\u0905';
        array[2] = '\u0905';
        CharBuffer charBuffer = CharBuffer.wrap(array);
        Charset utf8 = Charset.forName("UTF-8");
        ByteBuffer encoded = utf8.encode(charBuffer);
        System.out.println(new String(encoded.array()));

    }
}

当我使用终端执行此操作时,

java HelloWorld

我得到正确编码的形状文本。默认编码是MacRoman.

现在,当我从 Eclipse 执行相同的代码时,我看到错误的文本打印到控制台。

显示乱码文本的 Eclipse 控制台

当我将 Eclipse 的文件编码选项更改为 时UTF-8,它会在 Eclipse 中打印正确的结果。

我想知道为什么会这样?理想情况下,文件编码选项不应该影响此代码,因为我在这里明确使用 UTF-8。

知道为什么会这样吗?

我正在使用 Java 1.6 (Sun JDK)、Mac OSx 10.7。

4

5 回答 5

3

您需要指定创建字符串时要使用的编码:

new String(encoded.array(), charset)

否则它将使用默认字符集。

于 2013-06-18T17:00:50.010 回答
2

确保用于显示输出的控制台也以 UTF-8 编码。例如,在 Eclipse 中,您需要转到 Run Configuration > Common 来执行此操作。

在此处输入图像描述

于 2013-06-18T17:00:52.980 回答
1
System.out.println("\u0905\u0905\u0905");

将是直接的用法。

并且 String 构造函数缺少编码,默认为设置的默认编码。

new String(encoded.array(), "UTF-8")
于 2013-06-18T17:03:02.623 回答
0

这是因为 Eclipse 使用默认的 ANSI 编码,而不是 UFT-8。如果您使用的编码与您的 IDE 使用的编码不同,您将得到不可读的结果。

于 2013-06-18T17:02:02.513 回答
0

您需要更改控制台运行配置。

  • 点击“运行”
  • 单击“运行配置”,然后单击“常用”选项卡
  • 将编码更改为 UTF 在此处输入图像描述
于 2013-06-18T17:11:31.940 回答