Conversão para ASCII

10 respostas
T

Oi gente to com um probleminha em uma conversão de int para caracter asc II.

Estou tentando converter o número 225 para o seu correspondente ascII, isto é, “á”, e aí imprimo em um arquivo.

int i = 225;

char c = (char)i;

exporta c pro arquivo

Quando abro no textpad, que mostra o conteúdo do arquivo em hexadecimal e em ascII, o valor mostrado é “C3 A1”(hexadecimal) e Ä(ascII).

Não teria efetivamente que mostrar o valor “á” que é a representação em ascII do valor 225?

Valeu

10 Respostas

E

Aprenda algumas coisas:

a) ASCII indica apenas os caracteres cuja representação vai de 0 até 127. Todos os demais NÃO SÃO ASCII.
b) O conjunto de caracteres Windows-1252, também conhecido como “ANSI”, é o conjunto onde o caracter ‘á’ tem o código 225.
c) Casualmente, em Unicode, o caracter ‘á’ tem o código 0x00E1, ou seja, 225.
d) Quando você grava alguma coisa em arquivo, grava bytes, não caracteres. O jeito de gravar os caracteres (convertendo-os em bytes) é o tal do “encoding”.
e) Você provavelmente deve ter usado um PrintWriter ou um FileWriter para escrever o caracter ‘á’, em um sistema operacional (como o Linux) onde o “encoding” default é UTF-8. Nesse caso, os caracteres acentuados podem ser representados por 1 ou mais bytes. Procure por “UTF-8” na Wikipedia ou no Google para entender como é que 0x00E1 foi transformado para 2 bytes (C3 A1).

E

Se quiser que uma string seja gravada em um arquivo-texto com a codificação Windows-1252 (onde o caracter ‘á’ é representado como o byte 225 mesmo, sem alterações), especifique isso na hora de gravar. Por exemplo:

PrintWriter pw = new PrintWriter (new BufferedWriter (new OutputStreamWriter (new FileOutputStream ("teste.txt"), "Windows-1252")));
pw.println ("Ceará");
pw.close();
T

Entendi, porém no meu caso, poderia fazer da seguinte maneira:

String str = “á”;

String strc = (“á”,“Windows-1252”);

e oi resultado fique em strc?

é possivel?? por que preciso user o strc como parametro para outro método…

Valeu

E

Você ainda não entendeu. Em Java, todos os caracteres são representados com 2 bytes, usando a codificação unicode. Quando você grava uma string em um arquivo, você converte a string para bytes. Essa conversão depende de como você faz a gravação.

T

Ok, ou seja usando os metodos de print que vc me passou nao tem como sair disso?ou a gente consegue fazer a conversão na ponta?

E

Ora, na ponta da escrita. Não é para fazer conversão de “string” para “string” que isso não existe.

Você pode usar algum método de FileWriter, PrintWriter, BufferedWriter - não importa. São eles que fazem a conversão de strings para bytes.

T

Puts vai fikar complicado, pois eu crio um arraylist de caracteres do tipo string e mando esse arraylist como parametro pra ser exportado. Por isso gostaria de fazer o processo primitivo contrário… manjou?

e o modo como eu exporto é:
PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter (pathFile, true)));

Valeu!

T

OK cara agora saquei… mas engraçado… agora deu um problema no meu código:

Quando eu uso esse trecho que vc me passou:

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

Exporta normalmente, porém apenas para primeira chamada do metodo de exportação, se houver outra chamada para exportação de outros parâmetros os outros não entram no arquivo.

Agora se eu retornar com o trecho:

PrintWriter pw = new PrintWriter (new BufferedWriter (new FileWriter (pathFile, true)));

Ele nao exporta do jeito que eu quero (windows-1252) mas ele mantem o arquivo aberto esperando chamada de outros metodos de exportação de parâmetros.

Poderiam me ajudar?

E

Por favor, consulte a documentação de FileOutputStream. Há um construtor que recebe 2 parãmetros, e em um deles você tem de passar o valor “true”.

http://java.sun.com/javase/6/docs/api/java/io/FileOutputStream.html

T

[RESOLVIDO]

Criado 18 de dezembro de 2009
Ultima resposta 21 de dez. de 2009
Respostas 10
Participantes 2