[英]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的文件編碼選項更改為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使用的編碼不同,那么您將得到難以理解的結果。
您需要更改控制台運行配置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.