UTF-8 вывод программы Java отличается, если скомпилирован в командной строке и в IntelliJ - PullRequest
2 голосов
/ 26 октября 2011

Вывод следующей программы различается в зависимости от того, собираю ли я IntelliJ или собираю вручную из командной строки. Насколько я могу судить, на моей машине только один компилятор и JVM.

public class OutputTest {

public static void main(String[] args) throws Throwable {
  System.out.println(" Java Version: " +
        System.getProperty("java.version") +
        " from " + System.getProperty("java.vendor"));
  String message = "Dźien Dobry. Jak się masz?";
  ByteArrayOutputStream stream = new ByteArrayOutputStream();
  Charset charset = Charset.forName("UTF-8");
  PrintWriter pw = new PrintWriter(new java.io.BufferedWriter(
        new java.io.OutputStreamWriter(stream, charset)), true);
  pw.write(message);
  pw.close();
  System.out.println(stream.toString());
  System.out.println(java.util.Arrays.toString(stream.toByteArray()));
 }
}

Вывод при компиляции в IntelliJ:

Java Version: 1.6.0_26 from Apple Inc.
Dźien Dobry. Jak się masz?
[68, -59, -70, 105, 101, 110, 32, 68, 111, 98, 114, 121, 46, 32, 74, 97, 107, 32, 115, 105, -60, -103, 32, 109, 97, 115, 122, 63]

Вывод при компиляции из командной строки:

Java Version: 1.6.0_26 from Apple Inc.
D≈∫ien Dobry. Jak siƒô masz?
[68, -30, -119, -120, -30, -120, -85, 105, 101, 110, 32, 68, 111, 98, 114, 121, 46, 32, 74, 97, 107, 32, 115, 105, -58, -110, -61, -76, 32, 109, 97, 115, 122, 63]

Для ясности: вывод зависит от того, где код скомпилирован. Я также вижу первый ответ, если у меня IntelliJ скомпилировал код, но запустил его из командной строки.

Я использую MacOS 10.6.8.

Кроме того, для чего это стоит: Когда я компилирую его из командной строки в Linux, я получаю тот же ответ, что и версия, скомпилированная с IntelliJ.

Ответы [ 3 ]

0 голосов
/ 26 октября 2011

Изменить кодировку по умолчанию в IntelliJ IDEA Settings |File Encodings.

0 голосов
/ 26 октября 2011

Установить параметр javac для соответствия кодировке файла:

-encoding encoding
Set the source file encoding name, such as EUC-JP and UTF-8. If -encoding is not specified, the platform default converter is used.
0 голосов
/ 26 октября 2011

Проверьте кодировку платформы; вам может потребоваться указать параметр -encoding в командной строке, чтобы соответствовать действиям IntelliJ. Без этого он будет использовать кодировку платформы по умолчанию, которая может соответствовать или не соответствовать поведению IntelliJ.

...