如何在Java中将Unicode字符转换为正确的语言字符?

如何在Java中将Unicode字符转换为正确的语言字符?,java,unicode,locale,netbeans-7,Java,Unicode,Locale,Netbeans 7,我在数据库中有一个带有varchar字段的字段,我在其中存储泰语句子(以Unicode的形式) 我需要的是将Unicode字符解析为正确显示泰国字符的正确字符串 我的代码显示泰国字符的帮助下的地区对象 使用 ! 详情如下 Locale thaiLocale_ = new Locale("th", "TH", "TH"); NumberFormat nf = NumberFormat.getNumberInstance(thaiLocale_); double theDig_Doub

我在数据库中有一个带有varchar字段的字段,我在其中存储泰语句子(以Unicode的形式)

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

我的代码显示泰国字符的帮助下的地区对象 使用 ! 详情如下

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

我需要显示泰语字符序列的代码。

您已经有了通过特定语言环境将双精度字符转换为字符串的代码。通过调用
NumberFormat
对象上的
parse()
函数,可以实现相反的效果(将字符串转换为双精度):

double num = nf.parse(outputString).doubleValue();
您需要对
parse()
的结果调用
doubleValue()
,因为它直接返回一个
数字,而不是
double

调用
parse()
时,您需要准备捕获
ParseException
java.text.ParseException
),因为传入的字符串可能不是有效数字(至少就
parse
所知)


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

首先需要确保从数据库中获取的字符串正确地用unicode泰国字符表示

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

在确保从DB中获取的这些字符的格式正确后,您可以简单地使用以下代码将这些字符解析回浮点数

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

但在此之前,请确保泰语字符正确地从数据库返回。

以下代码适用于我,用于在NetBeans中显示泰语

     String strThai ="";
    if (rs.getString(i) != null )
        strThai= new String(rs.getString(i).getBytes("ISO8859_1"),"TIS-620");
其中rs是数据库中的结果集

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"));
    }

}

注意:在类路径中添加apachecommons lang jar。

您的问题令人困惑。首先要将Unicode解析为double,然后显示的代码是根据特定区域设置将double转换为string。哪一个是正确的?我要求首先将unicode序列转换为浮点,然后使用上述代码显示这些unicode的浮点重新表述,因此MyTheE代码生成以下Exption java.text.ParseException:不可解析的数字:“java.text.NumberFormat.parse(NumberFormat.java:350)处的ä、èÒèèèÍ”在DB.DBEngine.GetResultSet(DBEngine.java:335)处,即使我解析单个字符,它也会生成错误java.text.ParseException:不可解析的数字:“ä”我不在我的计算机上。该字符串不是数字,因此它当然会引发异常。DB中的值是什么?DB包含varchar字段中的unicode值。我正在逐字读取该值,正如您看到的“ä”。我知道DB有一个varchar字段(在java中转换为stringin),但为了将其转换为数字,需要对数字进行编码。您在上面的注释中引用的字符串不编码数字(AFAIK),因此出现异常。顺便说一句,你希望把它转换成什么号码?编码数字的有效字符串是问题代码中
outputString
的内容。如果你把它转换成一个数字,就不会有例外。您需要从数据库中获得一个格式类似的字符串才能将其转换为数字。这意味着我们从数据库中逐字读取,而不是从my DB.No的varchar字段中读取所有字符的整个序列。您应该从数据库中读取整个字符串,而不是逐个字符,因为每个字符加起来可能会损坏字符串。这条评论背后的主要逻辑是,泰语字符需要16位表示。而DB存储/获取机制最终可能会将您的字符串视为8位表示的字符串。或者可能会弄乱字符串的小端/大端结构。所以你需要确保你的字符串被正确地存储和读取。Yaar我认为下面的文章是同一篇文章,但它生成了以下Exption java.text.ParseException:不可解析的数字:java.text.NumberFormat.parse(NumberFormat.java:350)处的java.DBEngine.GetResultSet(DBEngine.java:335)处的“äèèèèèèèèèèÍ”处Shariq bhai我正在对实时数据应用代码,我们正在delphi中的程序中使用该代码,它正在正确显示泰国校正器。数据正确存储在sql server数据库中,并且在delphi程序中正确退出,正如我向您展示的屏幕截图所示。