7

我正在寻找一个库(Apache / BSD / EPL 许可)使用 \u 将本机文本转换为 ASCII 用于 ASCII 中不可用的字符(基本上是 java.util.Properties 所做的)。

我看了看,似乎没有任何现成的库。我发现:

有人知道上述许可下的库吗?

4

2 回答 2

15

您可以使用 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:commons-lang 包含 StringEscapeUtils.escapeJava() 可以转义和取消转义本机字符串。

于 2012-04-04T10:45:28.583 回答
5

试试 Apache commons-lang 的这段代码:

StringEscapeUtils.escapeJava("ایران زیبای من");
StringEscapeUtils.unescapeJava("\u0627\u06CC\u0631\u0627\u0646 \u0632\u06CC\u0628\u0627\u06CC \u0645\u0646");
于 2015-10-04T11:13:28.083 回答