2012-04-04 10 views
6

Sto cercando una libreria (con licenza Apache/BSD/EPL) per convertire il testo nativo in ASCII usando \ u per caratteri non disponibili in ASCII (in pratica cosa fa java.util.Properties) .Libreria per la conversione di native2ascii e viceversa

Ho dato un'occhiata e sembra che non ci siano librerie prontamente disponibili. Ho trovato:

È qualcuno a conoscenza di una libreria sotto sopra licenze dichiarate?

risposta

10

È possibile eseguire questa operazione con un CharsetEncoder. Devi leggere il testo "nativo" con la codifica corretta in Unicode. Quindi è possibile utilizzare un codificatore 'US-ASCII' per rilevare, quali caratteri devono essere tradotti in escape 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); 
} 
} 

Inoltre org.apache.commons: commons-lang contiene StringEscapeUtils.escapeJava(), che può sfuggire e unescape stringhe native.

+0

Thx, questo è un altro approccio. Quello che ancora non posso credere che questo non sia già stato fatto in qualsiasi altra libreria disponibile. Inoltre, è da considerare anche il contrario. –

+3

È possibile utilizzare StringEscapeUtils da apache commons: System.out.println (StringEscapeUtils.escapeJava ("Halloäöü")); C'è anche un unescapeJava corrispondente. Può essere trovato qui: http://commons.apache.org/lang/ – Andreas

+1

Grazie, Andreas. StringEscapeUtils ha fatto esattamente quello che stavo cercando. Mi sembra che questa sarebbe anche una buona risposta alla domanda posta. – Calon

3

Prova questo pezzo di codice da Apache commons-lang:

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