2012-04-04 68 views
6

我正在寻找一个库(Apache/BSD/EPL许可),以使用\ u为ASCII字符(基本上是java.util.Properties的作用)使用\ u将本机文本转换为ASCII。 。用于转换native2ascii和反之亦然的库

我有一个看起来似乎没有任何现成的图书馆。我发现:

是任何人都知道一个库下的上述规定许可证?

回答

10

你可以用CharsetEncoder来做到这一点。你必须阅读正确的编码unicode'本地'文本。您可以使用'US-ASCII'编码器来检测哪些字符将被转换为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); 
} 
} 

此外org.apache.commons:公地郎包含StringEscapeUtils.escapeJava(),它可以逃脱,未逸出本地字符串。

+0

THX,这是另一种方法。我仍然无法相信这在任何其他可用的图书馆中都没有完成。此外,另一方面也需要考虑。 – 2012-04-04 11:32:23

+3

你可以使用从Apache公共的StringEscapeUtils:System.out.println(StringEscapeUtils.escapeJava(“Halloäöü”));还有一个相应的unescapeJava。可以在这里找到:http://commons.apache.org/lang/ – Andreas 2012-04-04 11:42:43

+1

谢谢你,安德烈亚斯。 StringEscapeUtils做了我正在寻找的东西。在我看来,这对所提出的问题也是一个很好的答案。 – Calon 2013-11-29 10:17:58

3

尝试这段代码Apache的公地郎咸平:

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