String.getBytes (“ISO-8859-1”) дает мне 16-разрядные символы на OS X

Используя Java 6 для получения 8-разрядных символов от Строки:

System.out.println(Arrays.toString("öä".getBytes("ISO-8859-1")));

дает мне, на Linux: [-10, 28], но OS X я добираюсь: [63, 63, 63,-89]

Я кажусь, получают тот же результат при использовании необычного нового класса nio CharSetEncoder. Что я делаю неправильно? Или это - отказ Apple?:)

6
задан lennartcl 10 February 2010 в 08:34
поделиться

5 ответов

Мне удалось воспроизвести эту проблему, сохранив исходный файл как UTF-8, а затем сообщив компилятору, что это действительно MacRoman:

javac -encoding MacRoman Test.java

Я бы подумал javac по умолчанию будет использовать UTF-8 в OSX, но, возможно, и нет. Или, может быть, вы используете IDE и это по умолчанию MacRoman. В любом случае вы должны использовать вместо этого UTF-8.

4
ответ дан 10 December 2019 в 02:47
поделиться

Какая кодировка у исходного файла? 63 - это код для ? , что означает, что «символ не может быть преобразован в указанную кодировку».

Я предполагаю, что вы скопировали исходный файл на Mac, и что в исходном файле используется кодировка, которую Java-компилятор Mac не ожидает. IIRC, OS X ожидает, что файл будет в формате UTF-8.

2
ответ дан 10 December 2019 в 02:47
поделиться
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 очень удобны в таких случаях.

Вы хотите запустить их в исходном файле, а также в файле класса.

2
ответ дан 10 December 2019 в 02:47
поделиться

Может быть, набор символов для источника не установлен (и, следовательно, отличается в зависимости от языкового стандарта системы)?

Можно ли запустить один и тот же скомпилированный класс в обеих системах (без повторной компиляции)?

{{1} }
1
ответ дан 10 December 2019 в 02:47
поделиться

Имейте в виду, что существует не один способ представления символов. Mac OS X по умолчанию использует юникод, поэтому ваш строковый литерал может на самом деле не быть представлен двумя байтами. Вам необходимо убедиться, что вы загружаете строку из соответствующего входящего набора символов; например, указав в исходном коде экранирующий символ \u.

0
ответ дан 10 December 2019 в 02:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: