java.text.ParseException:无法解析的数字:“ä¢è»ÅÒËÅèÍ”

时间:2012-03-27 06:55:49

标签: java swing parsing encoding locale

我在数据库(Sql Server DB 2000)中有一个字段,其中包含varchar字段,其中我存储了Thai Sentence(以Unicode的形式)。我使用Locale对象将unicode数据转换为泰语句子,如下所示< / p>

NumberFormat thai = NumberFormat.getNumberInstance(new Locale("th", "TH", "TH"));//Line1
String thaiText = ResultSet.getString(i);// Data Fetched From DB//Line2
double number = thai.parse(thaiText).doubleValue();//Line3
String outputString= nf.format(number);//Line4

我在第3行遇到以下异常: -

java.text.ParseException: Unparseable number: "ä¢è»ÅÒËÅèÍ"

3 个答案:

答案 0 :(得分:3)

问题不在第3行;即它不是你解析字符串的方式。

由于早期的编码问题,thaiText的内容已损坏。你需要追踪文本的不良之处。

  • 在将文本放入数据库之前,文本可能不好。
  • 将文本放入数据库时​​,文本可能会变坏。
  • 从数据库中检索文本时,文本可能会变坏。

找出上述情况,并告诉您需要解决问题的位置。

答案 1 :(得分:0)

问题是因为您正在解析的数据编码错误。

你需要找出什么是数据,你可以使用“字符集转换器工具”,比如这个:http://kanjidict.stc.cx/recode.php,找出“ä¢è»ÅÒËÅèÍ”的编码是什么< / p>

然后使用以下代码设置正确的编码。

    String original = "ä¢è»ÅÒËÅèÍ";
    String thaiText = new String(original.getBytes(charset1), charset2);//you need to work out charset1 and charset2 here by youself

答案 2 :(得分:0)

您的问题很可能是您正在从数据库中读取的字符串未正确解码。您已在评论中表明了这一点。您可以尝试阅读注释并强制编码。这个例子是UTF-8:

  InputStreamReader isr = new InputStreamReader(new
     ByteArrayInputStream(rs.getBytes(i)), "UTF-8");

  StringWriter sw = new StringWriter();
  char[] cbuf = new char[4096];
  int len;
  while((len=isr.read(cbuf, 0, cbuf.length)) != -1) {
    sw.write(cbuf, 0, len);
  }
  isr.close();
  sw.close();

  String data = sw.toString();

检查“数据”是否具有正确的信息,然后将其解码为数字(如果有意义),就像您现在所做的那样。