sexta-feira, 8 de fevereiro de 2008

Convertendo String para representação Unicode

Olá!


Eu estava brincando com o Netbeans 6 e percebi que ele converte automaticamente caracteres especiais como acentos e ç em representação unicode. Por exemplo: ã é convertido para \u00e3
é claro que no JFrame o que aparece é ã. Isso é muito útil para manter a compatibilidade com os sistemas de arquivos dos sistemas operacionais que muitas vezes não reconhecem esses caracteres e transformam em ? ou em caracteres totalmente estranhos, aconteceu comigo esses dias ao copiar um fonte java do unix para o windows simplismente Débitos virou Débitos. As vezes isso acontece ao gravar um arquivo texto/xml.
Codifiquei um programinha para converter String com caracteres especiais para sua representação unicode.

public class Teste {

/**
* @param args
*/
public static void main(String[] args) {
String original = "ATENÇÃO! Pedimos que troque o pão francês para pão sírio.";
StringBuilder output = new StringBuilder();

for (int idx = 0; idx < original.length(); idx++) {
char c = original.charAt(idx);

if (!Character.isWhitespace(c) && !Character.isDigit(c)
&& !(c >= 33 && c <= 125) ){
output.append("\\u" + charToHex(c));
} else {
output.append(c);
}
}
System.out.println(output.toString());
}

static public String charToHex(char c) {
// Returns hex String representation of char c
byte hi = (byte) (c >>> 8);
byte lo = (byte) (c & 0xff);
return byteToHex(hi) + byteToHex(lo);
}

static public String byteToHex(byte b) {
// Returns hex String representation of byte b
char hexDigit[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'a', 'b', 'c', 'd', 'e', 'f' };
char[] array = { hexDigit[(b >> 4) & 0x0f], hexDigit[b & 0x0f] };
return new String(array);
}
}


Vale a pena dar uma lida nos links abaixo:

Byte Encodings and Strings
Unicode - Wikipedia
Entendendo Unicode e os Character Encodings

Espero que seja útil.

Até mais

Um comentário:

Anônimo disse...

Obrigadão, este teu código me quebrou um ganhão!!!!
[]s
Ricardo Spinoza
ricardospinoza@yahoo.com.br