Используя Java 6 для получения 8-разрядных символов от Строки:
System.out.println(Arrays.toString("öä".getBytes("ISO-8859-1")));
дает мне, на Linux: [-10, 28], но OS X я добираюсь: [63, 63, 63,-89]
Я кажусь, получают тот же результат при использовании необычного нового класса nio CharSetEncoder. Что я делаю неправильно? Или это - отказ Apple?:)
Мне удалось воспроизвести эту проблему, сохранив исходный файл как UTF-8, а затем сообщив компилятору, что это действительно MacRoman:
javac -encoding MacRoman Test.java
Я бы подумал javac
по умолчанию будет использовать UTF-8 в OSX, но, возможно, и нет. Или, может быть, вы используете IDE и это по умолчанию MacRoman. В любом случае вы должны использовать вместо этого UTF-8.
Какая кодировка у исходного файла? 63
- это код для ?
, что означает, что «символ не может быть преобразован в указанную кодировку».
Я предполагаю, что вы скопировали исходный файл на Mac, и что в исходном файле используется кодировка, которую Java-компилятор Mac не ожидает. IIRC, OS X ожидает, что файл будет в формате UTF-8.
label.setIcon(null)
в обработчике событий, который обрабатывает нажатие кнопки, если вы используете Swing.
-121--4144489-Project Euler является отличным источником проблем программирования
, также существует Код Rosetta
-121--2650630-Исходный файл создает "ö
Посмотрите на это:
System.out.println(Arrays.toString("\u00F6\u00E4".getBytes("ISO-8859-1")))
Это будет печатать [-10, -28], как вы ожидаете (я не люблю печатать так, но я знаю, что это не смысл вашего вопроса), потому что там кодовые точки Юникода указаны, вырезаны в камне, и ваш текстовый редактор не может «играть умно», комбинируя «о» и «а» с диакритическими знаками.
Обычно, когда вы сталкиваетесь с такими проблемами, вы, вероятно, хотите использовать две команды OS X Un * x, чтобы понять, что происходит под колпаком: файл
и hexdump
очень удобны в таких случаях.
Вы хотите запустить их в исходном файле, а также в файле класса.
Может быть, набор символов для источника не установлен (и, следовательно, отличается в зависимости от языкового стандарта системы)?
Можно ли запустить один и тот же скомпилированный класс в обеих системах (без повторной компиляции)?
{{1} }Имейте в виду, что существует не один способ представления символов. Mac OS X по умолчанию использует юникод, поэтому ваш строковый литерал может на самом деле не быть представлен двумя байтами. Вам необходимо убедиться, что вы загружаете строку из соответствующего входящего набора символов; например, указав в исходном коде экранирующий символ \u.