2012-06-06 3 views
3

Я хочу установить юникод символ в файле класса, как это:Использование символа unicode в файле .java?

TextView tv = ...; 
tv.setText("·"); 

есть все, что потенциально неправильно с использованием Юникода символа в файле .java?

Благодаря

+1

Это может быть педантичный комментарий, но официальная [Спецификация языка Java] (http://docs.oracle.com/javase/specs/jls/se7/html/jls-3.html) гласит: «Программы написаны в Юникоде ». Думаю, это означало бы, что вы не можете иметь * не-Unicode-символ * на Java, что бы это ни значило. Вы можете перефразировать вопрос. Терминология и наименования важны в этом бизнесе. :) –

ответ

4

No. Java строки поддерживают Unicode, так что вы не должны работать в каких-либо проблем. Возможно, вам придется проверить, что класс TextView обрабатывает все символы Юникода (что ему нужно), но сама Java будет обрабатывать символы юникода.

Вы также должны убедиться, что файл сохранен с правильными настройками кодировки. По сути, это означает, что ваш редактор должен сохранять java-файл в кодировке Unicode, кодированный UTF-8. См. Комментарии к этому ответу для получения дополнительной информации об этом.

+5

Вам также необходимо убедиться, что редактор, который вы используете, сохранит источник Java в UTF-8 (что и ожидает компилятор). В Eclipse проще всего перейти к Windows -> Preferences -> General -> Workspace, а затем установить кодировку текстового файла в UTF-8. –

+0

Мне всегда интересно, почему Eclipse задал кодировку текстового файла по умолчанию в зависимости от среды ОС. IMO, IntelliJ имеет гораздо лучшие настройки по умолчанию. –

+0

@TedHopp Хм, он не поймет UTF-16 (с BOM) и т. Д.? –

3

Есть ли что-то потенциально неправильное в использовании символа unicode в файле .java?

Как вы знаете, строки внутри JVM сохраняются в Unicode - так что вопрос в том, как иметь дело с Unicode в Java исходных файлов ...

Короче говоря, с использованием Unicode в порядке. Есть несколько способов подойти к нему ...

По умолчанию компилятор javac ожидает, что исходный файл будет находиться в кодировке по умолчанию платформы. Это может быть переопределен с помощью -encoding флаг:

-encoding encoding
Задает имя кодировки исходного файла, такие как EUCJIS/SJIS/ISO8859-1/UTF8. Если -encoding не указан, используется преобразователь по умолчанию платформы .

В качестве альтернативы, если это один символ (как это, кажется), вы можете сохранить исходный файл в кодировке платформы по умолчанию, а также указать символ с помощью последовательности символов Unicode:

tv.setText("\u1234"); 

... где «1234» - это значение Unicode для нужного вам символа.

Другой альтернативой является сначала сохранить файл в кодировке, совместимой с Unicode (например, UTF-8), затем использовать native2ascii для преобразования этого файла в исходную кодировку (он преобразует любые символы вне диапазона в соответствующий Unicode-escape последовательность).

ИМЯ
native2ascii - родной для ASCII преобразователь

СИНТАКСИС
native2ascii [ options ] [ inputfile [outputfile]]

ОПИСАНИЕ
Java-компилятор и другие инструменты Java могут только обрабатывать файлы, содержащие Latin-1 или Unicode-кодировке (\udddd запись) символы. native2ascii преобразует файлы, которые содержат другую кодировку символов, в файлы , содержащие символы символов Latin-1 или Unicode.

Если выходной файл опущен, для вывода используется стандартный вывод. Кроме того, если входной файл опущен, для ввода используется стандартный ввод.

Смежные вопросы