簡體   English   中英

為什么該Java程序在Eclipse上給出錯誤的結果,而從終端運行時卻給出正確的結果?

[英]Why is this Java program gives incorrect results on Eclipse and correct results when run from terminal?

考慮以下程序。

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。

您需要指定創建字符串時要使用的編碼:

new String(encoded.array(), charset)

否則它將使用默認字符集。

確保用於顯示輸出的控制台也以UTF-8編碼。 例如,在Eclipse中,您需要轉到Run Configuration> Common來執行此操作。

在此處輸入圖片說明

System.out.println("\u0905\u0905\u0905");

直接使用。

而且String構造函數缺少編碼,默認為設置的默認編碼。

new String(encoded.array(), "UTF-8")

發生這種情況是因為Eclipse使用默認的ANSI編碼,而不是UFT-8。 如果您使用的編碼與IDE使用的編碼不同,那么您將得到難以理解的結果。

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

  • 點擊“運行”
  • 單擊“運行配置”,然后單擊“常見”選項卡
  • 將編碼更改為UTF 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM