2012-04-04 15 views
6

ASCIIで利用できない文字(基本的にはjava.util.Propertiesの機能)に対して、ネイティブテキストをASCIIに変換するライブラリ(Apache/BSD/EPLライセンス) 。native2asciiとその逆変換用ライブラリ

私は見ていて、すぐに利用できるライブラリがないようです。私が見つかりました:

は、ライブラリーの意識誰もが上記の下にあります記載されたライセンス?

答えて

10

これはCharsetEncoderで行うことができます。ユニコードに正しいエンコーディングで「ネイティブ」テキストを読み込まなければなりません。 「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:コモンズ-langは脱出し、ネイティブの文字列をエスケープ解除することができStringEscapeUtils.escapeJavaを()が含まれています。

+0

Thxを、それはまた別のアプローチです。私はまだこれが他の利用可能なライブラリでは行われていないとは考えていません。加えて、他の方法も考慮する。 –

+3

あなたは、ApacheのコモンからStringEscapeUtilsを使用することができます:System.out.println(StringEscapeUtils.escapeJava( "Halloäöü"));対応するunescapeJavaもあります。ここで見つけることができます:http://commons.apache.org/lang/ – Andreas

+1

ありがとう、アンドレアス。 StringEscapeUtilsは私が探していたものとまったく同じでした。これは、提起された質問に対する良い答えになると私には思われます。 – Calon

3

は、Apache Commonsの-LANGからのコードのこの部分を試してみてください:

StringEscapeUtils.escapeJava("ایران زیبای من"); 
StringEscapeUtils.unescapeJava("\u0627\u06CC\u0631\u0627\u0646 \u0632\u06CC\u0628\u0627\u06CC \u0645\u0646"); 
関連する問題