Почему system.out.println () возвращает разные французские символы на французской ОС - PullRequest
2 голосов
/ 22 августа 2011

Привет, это простой вопрос, хотя сам не знаю ответа ... Вывод следующего кода, работающего на французской ОС, выглядит так:

public class FrenchTest {
public static void main(String[] args){
    String[] lines = {"Le résultat est", "Nom de l'hôte"};

    for(String line : lines){
        System.out.println("NOW : " + line);
    }   
}
//////////////
c:\share>java FrenchTest
NOW : Le résultat est
NOW : Nom de l'hôte

c:\share>CHCP 65001

c:\share>java FrenchTest
NOW : Le résultat est
NOW : Nom de l'hôte

Почему?Где суть кодирования для этого случая, он отлично работает на английской версии ОС, СПАСИБО!

Ответы [ 4 ]

1 голос
/ 22 августа 2011

Здесь есть две потенциальные проблемы:

  1. Проблема транскодирования во время компиляции - кодировка , используемая вашим компилятором, для чтения исходного файла должна совпадать с той, которую ваш редактор использует для ее сохранения.
  2. Проблема транскодирования во время выполнения - кодировка, используемая консолью для чтения данных, должна совпадать с той, которую System.out кодирует в

Проблемы компиляции можно обойти, используя экранирование Unicode:

  • "Le r\u00E9sultat est"
  • "Nom de l'h\u00F4te"

По умолчанию номер 2 всегда неверен в Windows.Для совместимости со старыми программами DOS cmd.exe по умолчанию использует системные кодировки OEM.Это не стандартная кодировка «ANSI», используемая частями системы Windows, которые по-прежнему застряли в кодировках, предшествующих Unicode.

Это можно исправить либо , переключив консольную кодировку на windows-1252:

>chcp 1252

... или путем изменения кодировки, используемой для передачи данных, в кодировку консоли.Самый простой способ сделать это - использовать Console .В отличие от System.out, System.console() обнаруживает и использует кодировку консоли.Использование Console может вызвать проблемы с запуском кода в IDE, но есть действий, которые вы можете сделать с этим .

Я не смог заставить работать UTF-8 с 65001.

Короче говоря, вам необходимо преодолеть решения, принятые для сохранения обратной совместимости.

1 голос
/ 22 августа 2011

Если вы измените кодовую страницу, а затем скажете Java, чтобы она выводилась в UTF-8, она должна работать.Обратите внимание, что вам нужно будет выбрать шрифт Unicode (TrueType) - на моем компьютере установлены Consolas и Lucida Console.

Обратите внимание, как показано ниже, я получаю последний символ, повторенный на моем компьютере с использованием Java 1.6.0_23.Не могу этого объяснить: (

msandiford@foo /cygdrive/c/foo
$ javac FrenchTest.java

msandiford@foo /cygdrive/c/foo
$ java -Dfile.encoding=UTF-8 FrenchTest
NOW : Le résultat estt
NOW : Nom de l'hôtee

msandiford@foo /cygdrive/c/foo
$ java -version
java version "1.6.0_23"
Java(TM) SE Runtime Environment (build 1.6.0_23-b05)
Java HotSpot(TM) Client VM (build 19.0-b09, mixed mode, sharing)
0 голосов
/ 22 августа 2011

Вам придется изменить кодировку на вашей консоли. В Windows это с помощью команды CHCP (Страница управления CHange)

* 1005 Е.Г. *

CHCP 65001  

65001 меняет страницу управления на вашей консоли на UTF-8.

0 голосов
/ 22 августа 2011

На моей машине работает:

  • установить кодировку файла в UTF-8
  • установить кодировку консоли на UTF-8

Java использует настройки ОС по умолчанию, но вы должны изменить эти два.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...