Quero exibir um caractere Unicode em Java. Se eu fizer isso, funcionará perfeitamente:
String symbol = "\u2202";
símbolo é igual a "∂". Isso é o que eu quero.
O problema é que eu sei o número Unicode e preciso criar o símbolo Unicode a partir dele. Tentei (para mim) o óbvio:
int c = 2202;
String symbol = "\\u" + c;
No entanto, neste caso, o símbolo é igual a "\ u2202". Não é isso que eu quero.
Como posso construir o símbolo se eu souber seu número Unicode (mas apenas em tempo de execução --- não posso codificá-lo como no primeiro exemplo)?
Respostas:
Basta lançar o seu
int
para umchar
. Você pode converter isso em umString
usandoCharacter.toString()
:EDITAR:
Lembre-se de que as sequências de escape no código-fonte Java (os
\u
bits) estão em HEX, portanto, se estiver tentando reproduzir uma sequência de escape, você precisará de algo semelhanteint c = 0x2202
.fonte
c
é menor do que 0x10000, caso contrário, essa abordagem falhará terrivelmente.Java chars go up to 0xFFFF
. Eu não sabia disso.Se você deseja obter uma unidade de código codificado em UTF-16 como um
char
, pode analisar o inteiro e convertê-lo como outros sugeriram.Se você deseja oferecer suporte a todos os pontos de código, use
Character.toChars(int)
. Isso vai lidar com casos em que os pontos de código não cabem em um únicochar
valor.Doc diz:
fonte
char
.scala> "👨🎨".map(_.toInt).flatMap((i: Int) => Character.toChars(i)).map(_.toHexString)
dáres11: scala.collection.immutable.IndexedSeq[String] = Vector(f468, 200d, f3a8)
Este emoji, "cantor", é abordado com os três pontos de códigoU+1f468
,U+200d
eU+1f3a8
. O dígito mais significativo está faltando. Posso adicioná-lo com um OR bit a bit ( stackoverflow.com/a/2220476/1007926 ), mas não sei como determinar quais caracteres analisados foram truncados. Obrigado!As outras respostas aqui suportam apenas unicode até U + FFFF (as respostas lidando com apenas uma instância de char) ou não dizem como chegar ao símbolo real (as respostas param em Character.toChars () ou usando método incorreto depois disso), adicionando minha resposta aqui também.
Para oferecer suporte a pontos de código suplementares, isso é o que precisa ser feito:
Também fiz um teste rápido para saber quais métodos de conversão funcionam e quais não
fonte
new String(Character.toChars(121849));
quebra no console do Eclipse, mas a versão de três linhas funciona.str4
tarefa, não deveriacode
sercodePoint
?Lembre-se de que
char
é um tipo integral e, portanto, pode receber um valor inteiro, bem como uma constante char.fonte
int
você procurava. Você estava procurando por 0x2202. Minha culpa. Em qualquer caso, se você tiver oint
do ponto de código que está procurando, poderá apenas convertê-lo em achar
e usá-lo (para construir a,String
se desejar).Este funcionou bem para mim.
Agora o text2 terá ∂.
fonte
fonte
É assim que se faz:
Esta solução é de Arne Vajhøj.
fonte
int c = 2202
, o que é errado! Uma solução melhor do que essa é simples de dizer, oint c = 0x2202
que o salvará dechar ccc...
linha do meio . Basta usarint cc = 0x2202;
e entãofinal String text=String.valueOf(cc);
Embora esta seja uma questão antiga, há uma maneira muito fácil de fazer isso no Java 11, que foi lançado hoje: você pode usar uma nova sobrecarga de Character.toString () :
Como esse método oferece suporte a qualquer ponto de código Unicode, o comprimento da String retornada não é necessariamente 1.
O código necessário para o exemplo dado na pergunta é simplesmente:
Essa abordagem oferece várias vantagens:
char
.char[]
, que geralmente é o que você deseja. A resposta postada por McDowell é apropriada se você deseja que o ponto de código seja retornado comochar[]
.fonte
int codePoint = 0x2202;
Então:String s = Character.toString(codePoint); // <<< Requires JDK 11 !!!
Ou em uma linha:System.out.println(Character.toString(0x2202)); // Prints ∂
Espero que isso ajude alguém a usar esse recurso do JDK 11.O código a seguir escreverá os 4 caracteres unicode (representados por decimais) para a palavra "ser" em japonês. Sim, o verbo "ser" em japonês tem 4 caracteres! O valor dos caracteres está em decimal e foi lido em uma matriz de String [] - usando divisão por exemplo. Se você tiver Octal ou Hex, parseInt também terá um radical.
fonte
Aqui é um bloco para imprimir caracteres Unicode entre
\u00c0
a\u00ff
:fonte
Infelizmente, remover uma reação conforme mencionado no primeiro comentário (newbiedoodle) não leva a um bom resultado. A maioria (se não todos) de IDE emite erros de sintaxe. A razão é que o formato Java Escaped Unicode espera a sintaxe "\ uXXXX", onde XXXX são 4 dígitos hexadecimais, que são obrigatórios. As tentativas de dobrar este barbante em pedaços falham. Claro, "\ u" não é o mesmo que "\\ u". A primeira sintaxe significa 'u' de escape, a segunda significa folga de escape (que é a folga) seguida por 'u'. É estranho, que nas páginas do Apache seja apresentado utilitário, que faz exatamente esse comportamento. Mas, na realidade, é um utilitário de simulação de escape. . O Apache tem alguns utilitários próprios (não os testei), que fazem esse trabalho para você. Pode ser, ainda não é isso, o que você quer ter. Mas este utilitário 1 tem uma boa abordagem para a solução. Com a combinação descrita acima (MeraNaamJoker). Minha solução é criar esta string de simulação de escape e, em seguida, convertê-la de volta para Unicode (para evitar a restrição real de escape de Unicode). Eu usei para copiar texto, então é possível que no método uencode seja melhor usar '\\ u' exceto '\\\\ u'. Tente.
fonte
char c = (char) 0x2202; String s = "" + c;
fonte
(A RESPOSTA ESTÁ EM DOT NET 4.5 e em java, deve haver uma abordagem semelhante)
Eu sou de West Bengal, na ÍNDIA. Como eu entendo o seu problema é ... Você quer produzir semelhante ao 'অ' (É uma carta na língua bengali), que tem Unicode HEX:
0X0985
.Agora, se você conhece esse valor em relação ao seu idioma, como produzirá esse símbolo Unicode específico do idioma, certo?
No Dot Net é tão simples quanto isto:
Agora x é sua resposta. Mas este é o HEX by HEX convert e a conversão de frase em frase é um trabalho para pesquisadores: P
fonte