Почему я не могу сделать привязку char к символу замка unicode в Java?
class A {
public static void main(String[] args) {
char a = '∀';
System.out.println(a);
char castle = '𝍇';
System.out.println(castle);
}
}
Я могу сделать char для перевернутого конца. Просто отлично, но когда я пытаюсь сделать замок char, он получает 3 ошибки компиляции. Почему?
$ javac A.java && java A
A.java:5: unclosed character literal
char castle = '𝍇';
^
A.java:5: illegal character: \57159
char castle = '𝍇';
^
A.java:5: unclosed character literal
char castle = '𝍇';
^
3 errors
Ответы
Ответ 1
Я подозреваю, что символ замка не вписывается ни в один char
, а скорее требует кодовой точки int
. В этом случае вы можете использовать его в литерале String
, но не как char
.
В Javadoc для Character
указано:
Тип данных char (и, следовательно, значение, которое инкапсулирует объект Character), основывается на исходной спецификации Unicode, которая определяет символы как 16-битные объекты фиксированной ширины. С тех пор стандарт Unicode был изменен, чтобы допускать символы, для представления которых требуется более 16 бит. Диапазон легальных кодовых пунктов теперь U + 0000 до U + 10FFFF, известный как скалярное значение Unicode.
Итак, я предполагаю, что этот символ требует более 16 бит, поэтому его нужно будет рассматривать как кодовую точку int
.
Ответ 2
Если ваш файл исходного кода содержит символы не-ascii (как и этот файл), вы должны убедиться, что javac
читает его с надлежащей кодировкой, иначе по умолчанию будет использоваться кодировка, которая, возможно, не та, в которой он был сохранен.
Итак, если вы сохранили файл в UTF-8
из своего редактора, его можно скомпилировать, используя:
javac -encoding utf8 A.java
Обратите внимание, что вы также можете использовать код кодировки unicode вместо фактического символа, что делает код компилируемым без директивы -encoding
:
char a = '\u2200'; // The codepoint for the ∀ character
String castle = "\ud834\udf47"; // Being a high-surrogate char, the castle cannot fit a single 16 bit char
Ответ 3
Если вы используете Windows:
- Создайте новый пустой текстовый документ где угодно и скопируйте прошлое
𝍇
внутри текстового документа.
- Закройте его и щелкните правой кнопкой мыши → "Свойства" → на вкладке "Общие" в разделе "Размер" 2 -byte.
Как вы видите, 2-байтовый, вам нужно использовать два символа.
Вероятно, вы хотите прочитать о UTF-16