Problema com conversão unicode

Gente, repliquei este tópico na seção avançada pq o pessoal não respondeu…

Coloquei como resolvido…mas continuo com o problema.

Quando uso o comando:

char a = ‘\u00FB’, retornando o caracter referente ao deciaml 251 ü.

se eu usar o mesmo comando char s = ‘\u0083’ não volta o caracter que eu quero… e sim o “?”.

Saberiam me dizer por que? Eu sei que depende do método que imprime, porém pq o FB funciona e o 0083 não?

Valeu!


U+0083 (Unicode Character ‘NO BREAK HERE’ (U+0083)) não é um caracter imprimível, segundo o Java. Por isso, é mostrado como um “?” em vez de um sinal de franco (como você deve estar esperando).

Existem duas coisas.

a) O encoding da sua String;
b) A capacidade da sua fonte.
c) O caracter ser ou não imprimível;

No caso, me parece ser mais um problema de encoding.

Onde você está imprimindo? Como você faz para visualizar o valor impresso? E como está o seu código que faz a impressão do valor?

Porque o \u0083 não é um caractere imprimível. Informações do ‘Mapa de caracteres’ do Linux:


[não é um caractere imprimível]

U+0083 <control>

Propriedades gerais do caractere

No Unicode desde: 1.1
Categoria Unicode: Outro, Controle

Várias representações úteis

UTF-8: 0xC2 0x83
UTF-16: 0x0083

Octal C UTF-8 com escape: \302\203
Entidade decimal XML: &#131;

Anotações e referências cruzadas

Apelidos:
 ? NO BREAK HERE

Veja também:
 ? U+2060 WORD JOINER

Jogo a informação em um array list no formato char… e jogo o array list para o método de impressão:

PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(pathFile, true), “Windows-1252”)));

Já tentou usar o encoding UTF-8?

Então gente… fiz uma gambiarra…e funcionou…
fui no word… inseri o simbolo que eu queria… o “éfinho” de função…
copiei e colei na variável declarada com char no meu código e deu certo…

mas achei um jeito mto primitivo e limitado fazer isso visto que futuramente poderei precisar de novo…

teria um jeito mais fiel de fazer isso?

Valeu!

Você chegou perto. :smiley:
Acho que sei qual foi seu erro, você não sacou que o Java usa um esquema de codificação e o Windows ou o DOS usa outros esquemas. Pode ser que eu tenha me expressado mal, sinto muito.

<alt+0131> ==> Pressione o alt enquanto digita 0131.

A codificação do java você já sabe.
Olhe aqui o esquema do Windows Latino: http://en.wikipedia.org/wiki/Windows-1252
Viu que o Windows mapeia o caracteres acima de 0x7F diferentemente do java? U+0083 não será impresso, você já deve estar careca de saber disso. A sacada é que há uma conversão entre esses dois tipos de codificação.

Quando você digita <alt+0131>/copia e cola o “éfinho” no seu editor do windows, que está usando codificação codepage 1252, ele tem o valor 0x0083(131 decimal) no seu editor. Quando esse caracter “vai” para o java, quando é compilado, ele sofre uma conversão para que não haja diferença na letra, no “desenho da letra”, que você está manipulando. Da mesma forma acontece o contrário. Então o U+0083 nunca será impresso pois a codificação do Windows não suporta esse char, não há uma conversão de U+0083 para o codepage 1252, até porque é um caracter de controle, por isso aparece uma interrogação quando você tentar imprimir esse valor. O valor Unicode que sofrerá a conversão para 0x0083/<alt+0131> em codepage 1252 é o U+0192, veja que na tabela debaixo de cada letra tem o valor Unicode da mesma.

public class teste { // A classe teste se chama teste para se fazer testes.

	public static void main(String[] args) {

	char a = '<alt+0131>'; // Seu "éfinho"    '\u0192'   U+0192
	System.out.printf("--> %c (0x%X) <--\n", a, (int)a); // Imprime o caracter e seu valor em hexadecimal no Java, Unicode, UTF-16.
	}
}

Cara saquei o que vc diz… mas esse comando que vc coloka(char a = ‘<alt+0131>’:wink: é fictício?
digo, somente para ilustrar o meu éfinho, pois eu colokei no meu código e ele não reconhece o a palavra alt dentro das aspas.

<alt+0131> quer dizer que você tem de pressionar a tecla ALT, e então pressionar as teclas (no teclado numérico) 0, 1, 3, 1.

Cuidado, porque muitos editores de texto usam essa combinação para outras coisas, e a combinação supracitada não funciona.

Você pode usar o Notepad (Bloco de Notas) para digitar essa tecla, e então copiá-la via Clipboard (Área de Transferência), com Ctrl+C --> Ctrl+V.

O entanglement tem as manhas. :smiley:

Mil desculpas se eu novamente não me fiz entender.

Nesse campo de edição do fórum funciona (mas depois que você envia ou visualiza dá pau :D), no Word, no Wordpad, no Bloco de Notas e no Eclipse também mas no TextPad não. :frowning:

blz gente deu pra ter uma boa idéia desse assunto agradeco toda atencao dada por vcs!
Valeu mesmo!

aonde q eu coloko o problema como resolvido pra encerrar o assunto