Converter String de utf8 to unicode JAVA

10 respostas
F

Olá,

Alguém poderia me informa uma forma de percorrer uma string que verifica se é caracter especial e substituir para o código do utf8.

Em PHP seria assim http://php.tonnikala.org/manual/pt_BR/function.unicode-encode.php, mas quer saber se já tem algum método que faz isso em JAVA.

Obrigado

10 Respostas

R

fernando n vicente:
Olá,

Alguém poderia me informa uma forma de percorrer uma string que verifica se é caracter especial e substituir para o código do utf8.

Em PHP seria assim http://php.tonnikala.org/manual/pt_BR/function.unicode-encode.php, mas quer saber se já tem algum método que faz isso em JAVA.

Obrigado

[i]Você quer converter pra que?

[/i]

L

qual é a motivação pra fazer isso?

F

quero converter pq utilizo múltiplos idiomas e gravar esse conteúdo em um arquivo

L

então é só usar o mesmo encoding (ex. UTF-8 ) para tudo, não precisa ficar convertendo nada.

F

quando estiver percorrendo a string e encontrar um caracter especial, tenho que substituir para \u65e5, por exemplo

J

Faça algo parecido com isso:

String texto1 = "abc";
byte array[] = texto1.getBytes("UTF-8");

Depois transforme em String novamente e guarde como quiser.

F

Por favor, alguém poderia me ajudar a percorrer uma string e verificar se o caracter é especial, se for substituir pelo código ascii, depois retornar a string modificada.

por exemplo => [color=red]endereço[/color] em [color=darkred]endere\u00e7o[/color]

Obrigado

L

aí é que está, vc não precisa fazer isso, é só setar o encoding corretamente…

o JoaoBluSCBR te deu uma solução razoável pra fazer o que vc quer:

byte array[] = texto.getBytes("UTF-8");
String novaString = new String(array, "ISO-8859-1");

vc pode trocar esses encodings pro que vc quiser… mas vc precisa saber qual é o encoding original

F

OK! mas o que precisava era isso

package com.siter.model.external;

public class UnicodeString {

	public String convert(String str) {
		StringBuffer ostr = new StringBuffer();

		for (int i = 0; i < str.length(); i++) {
			char ch = str.charAt(i);
			/* caracter precisa ser convertido para unicode? */
			if ((ch >= 0x0020) && (ch <= 0x007e)) {
				/* não */
				ostr.append(ch);
			} else {
				/* sim */
				ostr.append("\\u"); /* formato de unicode padrão */
				/* pega o valor hexadecimal do caracter */
				String hex = Integer.toHexString(str.charAt(i) & 0xFFFF);
				for (int j = 0; j < 4 - hex.length(); j++) {
					/* concatena o zero porque o unicode requer 4 digitos */
					ostr.append("0");
				}
				ostr.append(hex.toLowerCase());
			}
		}
		return (new String(ostr));
	}
	
	public static void main(String[] args) {
		System.out.println(new UnicodeString().convert("endereço"));
	}
}
K

Lucas Cavalcanti:
aí é que está, vc não precisa fazer isso, é só setar o encoding corretamente…

o JoaoBluSCBR te deu uma solução razoável pra fazer o que vc quer:

byte array[] = texto.getBytes("UTF-8");
String novaString = new String(array, "ISO-8859-1");

vc pode trocar esses encodings pro que vc quiser… mas vc precisa saber qual é o encoding original

Perfeito, cara. Valeu!

Criado 6 de julho de 2011
Ultima resposta 23 de fev. de 2012
Respostas 10
Participantes 5