2012-04-04 14 views
6

Ich bin auf der Suche nach einer Bibliothek (Apache/BSD/EPL lizenziert), um nativen Text in ASCII zu konvertieren, indem Sie Zeichen für Zeichen verwenden, die nicht in ASCII verfügbar sind (im Grunde was java.util.Properties tut) .Bibliothek zum Konvertieren von native2ascii und umgekehrt

Ich hatte einen Blick und es scheint keine Bibliotheken verfügbar zu sein. Ich fand:

Ist jemand bekannt, eine Bibliothek unter dem oben angegebene Lizenzen?

Antwort

10

Sie können dies mit einem CharsetEncoder tun. Sie müssen den "nativen" Text mit der korrekten Codierung für Unicode lesen. Dann können Sie mit einem 'US-ASCII'-Encoder erkennen, welche Zeichen in Unicode-Escapes übersetzt werden sollen.

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); 
} 
} 

Zusätzlich org.apache.commons: commons-lang enthält StringEscapeUtils.escapeJava(), die und unescape nativen Strings entweichen kann.

+0

Thx, dass ein anderer Ansatz ist. Was ich immer noch nicht glauben kann, dass dies in keiner anderen verfügbaren Bibliothek bereits geschehen ist. Zusätzlich ist auch der umgekehrte Weg zu berücksichtigen. –

+3

Sie könnten StringEscapeUtils aus Apache Commons verwenden: System.out.println (StringEscapeUtils.escapeJava ("Halloäöü")); Es gibt auch eine entsprechende unescapeJava. Kann hier gefunden werden: http://commons.apache.org/lang/ – Andreas

+1

Danke, Andreas. StringEscapeUtils hat genau das gemacht, was ich gesucht habe. Das scheint mir auch eine gute Antwort auf die gestellte Frage zu sein. – Calon

3

Versuchen Sie dieses Stück Code von Apache commons-lang:

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