7

ASCII で使用できない文字に \u を使用してネイティブ テキストを ASCII に変換するライブラリ (Apache / BSD / EPL ライセンス) を探しています (基本的に java.util.Properties の機能)。

調べてみたところ、すぐに利用できるライブラリはないようです。私が見つけた:

上記のライセンスに基づくライブラリを知っている人はいますか?

4

2 に答える 2

15

これは CharsetEncoder で行うことができます。Unicode への正しいエンコーディングで「ネイティブ」テキストを読み取る必要があります。「US-ASCII」エンコーダーを使用して、どの文字をユニコードエスケープに変換するかを検出できます。

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 に答える