2012-03-26 8 views
-1

저는 데이터베이스에 varchar 필드가있는 하나의 필드가 있습니다.이 필드에는 Thai Sentence (유니 코드 형식)가 저장되어 있습니다.유니 코드 문자를 Java의 올바른 언어 문자로 변환하는 방법?

내가 필요한 것은 타이 문자를 올바르게 표시하는 적절한 문자열로 유니 코드 문자를 구문 분석하는 것입니다.

Oracle Docs을 사용하여 로캘 개체 을 사용하여 태국어 문자를 표시하기위한 코드! 은 다음과 같습니다.

Locale thaiLocale_ = new Locale("th", "TH", "TH"); 
    NumberFormat nf = NumberFormat.getNumberInstance(thaiLocale_); 
    double theDig_Doub =573.34 
    String outputString = new String(); 
    outputString =nf.format(theDig_Doub); 

태국어 문자 시퀀스 표시를위한 코드가 필요합니다.

+0

귀하의 질문에 혼란이 있습니다. 먼저 유니 코드를 두 번 파싱하는 것에 대해 이야기하고 있습니다. 그러면 표시된 코드는 특정 로케일에 따라 두 번을 문자열로 변환하는 것입니다. 올바른 것은 무엇입니까? – Attila

+0

유니 코드 시퀀스를 float로 변환 한 다음 위의 코드를 사용하여 유니 코드의 float reprisentation을 표시해야하므로 내 –

답변

0

다음 코드는 NetBeans에서 태국어를 표시하는 데 적합합니다.

 String strThai =""; 
    if (rs.getString(i) != null) 
     strThai= new String(rs.getString(i).getBytes("ISO8859_1"),"TIS-620"); 

여기서 rs는 데이터베이스의 ResultSet입니다.

0

특정 로캘을 통해 double을 문자열로 변환하는 코드가 이미 있습니다. 당신은 NumberFormat 개체의 parse() 함수를 호출하여 (두 배로 문자열 변환) 반대를 얻을 수 있습니다

double num = nf.parse(outputString).doubleValue(); 

귀하는 직접 Number 아닌 double을 반환로 parse()의 결과에 doubleValue()를 호출해야합니다. 당신이 필요합니다

은 잡을 수 있도록 준비하는 ParseException (java.text.ParseException) 유효한 숫자를하지 않을 수도 전달 된 문자열로 parse()를 호출 할 때 (적어도 지금까지 parse가 알고있는대로).

위 코드는 질문의 코드에 선언 된 outputString 변수를 사용합니다.

+0

코드가 다음 excong을 생성합니다. java.text.ParseException : 파열 할 수없는 숫자 : "ä ¢ è »ÅÒËÅùÍ " at java.text.NumberFormat.parse (NumberFormat.java : 350) DB.DBEngine.GetResultSet (DBEngine.java:335) 에서 –

+0

하나의 문자를 구문 분석해도 오류가 발생합니다. java.text.ParseException : Unparseable number : "ä" –

+0

왜 응답이 없습니까? ???????????????????? –

1

먼저 데이터베이스에서 가져 오는 문자열이 유니 코드 타이 문자로 올바르게 표시되는지 확인해야합니다.

DB 저장/검색 메커니즘으로 인해 태국어 문자열이 손상되었을 수 있습니다.

DB에서 가져 오는 문자가 올바른 형식인지 확인한 후 다음 코드를 사용하여 문자를 다시 float로 구문 분석하면됩니다.

NumberFormat thai = NumberFormat.getNumberInstance(new Locale("th", "TH", "TH")); 

String thaiText = db.getValue();// You need to put your db fetching logic here 
double number = thai.parse(thaiText).doubleValue(); 

그러나이 모든 작업을 수행하기 전에 타이 문자가 DB에서 올바르게 다시 입력되는지 확인하십시오.

+0

이것은 우리가 DB에서 문자로 문자를 읽는 것을 의미합니다. 내 db의 varchar 필드에 저장된 모든 문자의 전체 시퀀스가 ​​아닙니다. –

+0

아니요. 문자 단위의 문자가 문자열을 손상시킬 수 있기 때문에 문자 단위가 아닌 DB에서 전체 문자열을 읽어야합니다. 이 논평 뒤에있는 주요 논리는 타이 문자가 16 비트 표현이 필요하다는 것입니다. DB 저장/불러 오기 메커니즘은 문자열을 8 비트 표현 문자열로 간주 할 수 있습니다. 또는 문자열의 리틀 엔디안/빅 엔디안 구조를 엉망으로 만들 수 있습니다. 따라서 문자열이 올바르게 저장되고 읽혀지고 있는지 확인해야합니다. –

+0

Yaar 나는 아래에 동일한 게시물이지만 생각 다음과 같은 excpt java.text.ParseException 생성 : 생각할 수없는 번호 : "ä ¢ è»ÅÒËÅèÍ"at java.text.NumberFormat.parse (NumberFormat.java:350) at DB. DBEngine.GetResultSet (DBEngine.java:335) –

0
public class Unifun { 


    public static String convertunitostring(String s) { 

     return StringEscapeUtils.unescapeJava(s); 
    } 

    public static void main(String args[]) { 
     System.out.println(convertunitostring("\ufeff\u0110\u1eaf\u0063\u0020\u004c\u1eaf\u0063")); 
    } 

} 

참고 : 클래스 경로에 Apache commons lang jar를 추가하십시오.

관련 문제