2012-03-26 75 views
-1

我有一个字段在数据库与varchar字段,我在其中存储泰语句子(以Unicode的形式)。如何将Unicode字符转换为Java中正确的语言字符?

我需要的是将Unicode字符解析为正确显示泰文字符的正确字符串。

我的代码用于显示泰语字符借助于语言环境对象 使用 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

你的问题很混乱。首先你谈论的是将Unicode解析为double,然后显示的代码是根据特定语言环境将double转换为字符串。哪一个是正确的? – Attila 2012-03-26 02:06:58

+0

我需要两个第一至unicode的序列转换成浮点,然后通过使用上述代码,以显示Unicode的这些浮reprisentation,所以我的 – 2012-03-26 02:41:54

回答

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(); 

你需要调用doubleValue()上的parse()的结果,因为它直接返回一个Number,而不是一个double

您需要准备搭上ParseExceptionjava.text.ParseException)调用parse()为传递可能不是一个有效的数字字符串时(至少就parse知道)。

上面的代码使用在问题的代码中声明的outputString变量。

+0

代码生成以下excption java.text.ParseException:不可解析数:“一¢è »ÅÒËÅèÍ“ at java.text.NumberFormat.parse(NumberFormat。java:350) at DB.DBEngine.GetResultSet(DBEngine.java:335) at – 2012-03-26 03:19:07

+0

即使我解析单个字符,它也会生成错误java.text.ParseException:Unparseable number:“ä” – 2012-03-26 03:46:15

+0

为什么没有答复? ?????????????????????? – 2012-03-26 03:47:56

1

您首先需要确保您从数据库获取的字符串正确以unicode泰文字符表示。

因为数据库存储/检索机制可能已损坏您的泰国字符串。

确保从数据库中获取的硫字符的格式正确后,可以简单地使用以下代码将字符解析为浮点。

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

这意味着我们从数据库中逐字符读取字符,而不是存储在我的数据库的varchar字段中的所有字符的全部序列。 – 2012-03-26 09:15:54

+0

不可以。您应该从数据库中读取整个字符串,而不是逐个字符,因为逐个字符可能会加起来破坏您的字符串。这个评论背后的主要逻辑是,泰语字符需要16位表示。尽管数据库存储/读取机制可能最终将您的字符串视为8位代表的字符串。或者可能会弄乱你的字符串的小端/大端结构。所以你需要确保你的字符串被正确存储和读取。 – 2012-03-26 09:17:24

+0

Yaar我认为下面是相同的帖子,但它正在生成下面的excption java.text.ParseException:不可解析的数字:在数据库的java.text.NumberFormat.parse(NumberFormat.java:350)处的“ääääÅäËÅèÍÍ”。 DBEngine.GetResultSet(DBEngine.java:335) – 2012-03-26 09:27:38

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。

相关问题