2012-04-04 16 views
6

Estoy buscando una biblioteca (con licencia Apache/BSD/EPL) para convertir texto nativo a ASCII usando \ u para caracteres no disponibles en ASCII (básicamente lo que hace java.util.Properties) .Biblioteca para convertir native2ascii y viceversa

Eché un vistazo y no parece que haya bibliotecas disponibles. He encontrado:

Hay alguien consciente de una biblioteca bajo el anterior licencias establecidas?

Respuesta

10

Puede hacerlo con un CharsetEncoder. Tienes que leer el texto 'nativo' con la codificación correcta para unicode. Entonces puede usar un codificador 'US-ASCII' para detectar qué caracteres se deben traducir a escapes de Unicode.

import java.nio.charset.Charset; 
import java.nio.charset.CharsetEncoder; 

import org.junit.Test; 

public class EncodeToEscapes { 

@Test 
public void testEncoding() { 
    final String src = "Hallo äöü"; // this has to be read with the right encoding 
    final CharsetEncoder asciiEncoder = Charset.forName("US-ASCII").newEncoder(); 
    final StringBuilder result = new StringBuilder(); 
    for (final Character character : src.toCharArray()) { 
     if (asciiEncoder.canEncode(character)) { 
      result.append(character); 
     } else { 
      result.append("\\u"); 
      result.append(Integer.toHexString(0x10000 | character).substring(1).toUpperCase()); 
     } 
    } 
    System.out.println(result); 
} 
} 

Además org.apache.commons: commons-lang contiene StringEscapeUtils.escapeJava() que puede escapar y unescape cadenas nativas.

+0

Thx, eso es otro enfoque. Lo que todavía no puedo creer es que esto aún no se ha hecho en ninguna otra biblioteca disponible. Además, al revés también se debe considerar. –

+3

Puede usar StringEscapeUtils desde apache commons: System.out.println (StringEscapeUtils.escapeJava ("Halloäöü")); También hay un unescapeJava correspondiente. Se puede encontrar aquí: http://commons.apache.org/lang/ – Andreas

+1

Gracias, Andreas. StringEscapeUtils hizo exactamente lo que estaba buscando. Me parece que esta también sería una buena respuesta a la pregunta planteada. – Calon

3

probar este pedazo de código de Apache commons-lang:

StringEscapeUtils.escapeJava("ایران زیبای من"); 
StringEscapeUtils.unescapeJava("\u0627\u06CC\u0631\u0627\u0646 \u0632\u06CC\u0628\u0627\u06CC \u0645\u0646"); 
Cuestiones relacionadas