2012-04-04 7 views
6

Tôi đang tìm thư viện (Apache/BSD/EPL được cấp phép) để chuyển đổi văn bản gốc sang ASCII bằng \ u cho các ký tự không có sẵn trong ASCII (về cơ bản những gì java.util.Properties thực hiện) .Thư viện để chuyển đổi native2ascii và ngược lại

Tôi đã xem và dường như không có bất kỳ thư viện nào có sẵn. Tôi tìm thấy:

Có ai biết về một thư viện dưới sự trên giấy phép đã nêu?

Trả lời

10

Bạn có thể thực hiện việc này bằng bộ mã CharsetEncoder. Bạn phải đọc văn bản 'bản địa' với mã hóa chính xác thành unicode. Hơn bạn có thể sử dụng một bộ mã hóa 'US-ASCII' để phát hiện, các ký tự nào sẽ được dịch sang thoát 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); 
} 
} 

Ngoài ra org.apache.commons: commons-lang chứa StringEscapeUtils.escapeJava() có thể thoát và không có chuỗi gốc.

+0

Thx, đó là cách tiếp cận khác. Những gì tôi vẫn không thể tin rằng điều này chưa được thực hiện trong bất kỳ thư viện có sẵn khác. Ngoài ra vòng khác cũng được xem xét. –

+3

Bạn có thể sử dụng StringEscapeUtils từ các giao thức apache: System.out.println (StringEscapeUtils.escapeJava ("Halloäöü")); Ngoài ra còn có một unescapeJava tương ứng. Có thể tìm thấy tại đây: http://commons.apache.org/lang/ – Andreas

+1

Cảm ơn bạn, Andreas. StringEscapeUtils đã làm chính xác những gì tôi đang tìm kiếm. Dường như với tôi rằng đây cũng là một câu trả lời hay cho câu hỏi đặt ra. – Calon

3

Hãy thử đoạn mã này từ Apache commons-lang:

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