我在数据库(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: "ä¢è»ÅÒËÅèÍ"
答案 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();
检查“数据”是否具有正确的信息,然后将其解码为数字(如果有意义),就像您现在所做的那样。