Я хочу отобразить символ Unicode в Java. Если я сделаю это, все будет нормально:
String symbol = "\u2202";
символ равен «∂». Это то, что я хочу.
Проблема в том, что я знаю номер Unicode, и мне нужно создать из него символ Unicode. Я попробовал (для меня) очевидное:
int c = 2202;
String symbol = "\\u" + c;
Однако в этом случае символ равен «\ u2202». Я не этого хочу.
Как я могу создать символ, если я знаю его номер в Юникоде (но только во время выполнения - я не могу жестко запрограммировать его, как в первом примере)?
Ответы:
Просто переведите ваш файл
int
в файлchar
. Вы можете преобразовать это вString
использованиеCharacter.toString()
:РЕДАКТИРОВАТЬ:
Просто помните, что escape-последовательности в исходном коде Java (
\u
биты) находятся в HEX, поэтому, если вы пытаетесь воспроизвести escape-последовательность, вам понадобится что-то вродеint c = 0x2202
.источник
c
меньше 0x10000, иначе этот подход ужасно сломается.Java chars go up to 0xFFFF
. Я не знал этого.Если вы хотите получить кодированный блок кода UTF-16 как a
char
, вы можете проанализировать целое число и привести к нему, как предлагали другие.Если вы хотите поддерживать все кодовые точки, используйте
Character.toChars(int)
. Это будет обрабатывать случаи, когда кодовые точки не могут поместиться в одноchar
значение.Док говорит:
источник
char
.scala> "👨🎨".map(_.toInt).flatMap((i: Int) => Character.toChars(i)).map(_.toHexString)
даетres11: scala.collection.immutable.IndexedSeq[String] = Vector(f468, 200d, f3a8)
этот смайлик, «мужской певец», адресованный с тремя точками кодаU+1f468
,U+200d
иU+1f3a8
. Старшая цифра отсутствует. Я могу добавить его с помощью побитового ИЛИ ( stackoverflow.com/a/2220476/1007926 ), но не знаю, как определить, какие проанализированные символы были усечены. Спасибо!Другие ответы здесь либо поддерживают только Unicode до U + FFFF (ответы, касающиеся только одного экземпляра char), либо не говорят, как добраться до фактического символа (ответы останавливаются на Character.toChars () или с использованием неправильного метода после этого), так что добавляю и свой ответ здесь.
Вот что необходимо сделать для поддержки дополнительных кодовых точек:
Я также быстро проверил, какие методы преобразования работают, а какие нет.
источник
new String(Character.toChars(121849));
не работает в консоли Eclipse, но трехстрочная версия работает.str4
задания не должноcode
бытьcodePoint
вместо этого?Помните, что
char
это целочисленный тип, поэтому ему можно присвоить целочисленное значение, а также константу типа char.источник
int
вы искали. Вы искали 0x2202. Моя вина. В любом случае, если у вас естьint
код, который вы ищете, вы можете просто преобразовать его в achar
и использовать (для создания a,String
если хотите).Этот сработал для меня.
Теперь text2 будет иметь ∂.
источник
источник
Вот как вы это делаете:
Это решение принадлежит Арне Вайхёю.
источник
int c = 2202
, что это неправильно! Лучшее решение, чем это, - просто сказать,int c = 0x2202
что избавит вас от использования String и т. Д.char ccc...
линии. Просто используйте,int cc = 0x2202;
а потомfinal String text=String.valueOf(cc);
Хотя это старый вопрос, в Java 11, выпущенной сегодня, есть очень простой способ сделать это: вы можете использовать новую перегрузку Character.toString () :
Поскольку этот метод поддерживает любую кодовую точку Unicode, длина возвращаемой строки не обязательно равна 1.
Код, необходимый для примера, приведенного в вопросе, прост:
Такой подход дает несколько преимуществ:
char
.char[]
, что часто бывает у вас. Ответ, опубликованный Макдауэллом , подходит, если вы хотите, чтобы код возвращался какchar[]
.источник
int codePoint = 0x2202;
То:String s = Character.toString(codePoint); // <<< Requires JDK 11 !!!
Или однострочным:System.out.println(Character.toString(0x2202)); // Prints ∂
Надеюсь, это поможет кому-то другому, использующему эту функцию JDK 11.В приведенном ниже коде будут записаны 4 символа Юникода (представленные десятичными знаками) для слова «быть» на японском языке. Да, в глаголе «быть» в японском языке 4 символа! Значение символов находится в десятичном формате, и оно было считано в массив String [] - например, с помощью split. Если у вас есть Octal или Hex, parseInt также принимает основание.
источник
Вот блок для распечатки Юникода символов между
\u00c0
к\u00ff
:источник
К сожалению, удаление одного люфта, упомянутого в первом комментарии (newbiedoodle), не приводит к хорошему результату. Большинство (если не все) IDE выдают синтаксические ошибки. Причина в том, что формат Java Escaped Unicode ожидает синтаксиса «\ uXXXX», где XXXX - это 4 шестнадцатеричные цифры, которые являются обязательными. Попытки сложить эту веревку из кусков не удались. Конечно, «\ u» - это не то же самое, что «\\ u». Первый синтаксис означает экранированную «u», второй означает экранированный люфт (который является люфтом) с последующим «u». Странно, что на страницах Apache представлена утилита, делающая именно это поведение. Но на самом деле это утилита Escape mimic . У Apache есть несколько собственных утилит (я их не тестировал), которые делают эту работу за вас. Может быть, это еще не то, что вы хотите иметь.Но эта утилита 1 имеет хороший подход к решению. С комбинацией, описанной выше (MeraNaamJoker). Мое решение - создать эту экранированную мимическую строку, а затем преобразовать ее обратно в Unicode (чтобы избежать реального ограничения Escaped Unicode). Я использовал его для копирования текста, поэтому возможно, что в методе uencode будет лучше использовать '\\ u', кроме '\\\\ u'. Попытайся.
источник
символ c = (символ) 0x2202; Строка s = "" + c;
источник
(ОТВЕТ В DOT NET 4.5 и в java должен существовать аналогичный подход)
Я из Западной Бенгалии в ИНДИИ. Как я понимаю , ваша проблема ... Вы хотите производить похожие на «অ» (Это письмо на бенгальском языке) , который имеет Unicode HEX:
0X0985
.Теперь, если вы знаете это значение применительно к вашему языку, то как вы правильно создадите этот специфичный для языка символ Unicode?
В Dot Net это очень просто:
Теперь x - ваш ответ. Но это преобразование HEX на HEX, и преобразование предложений в предложения - это работа для исследователей: P
источник