java.text.ParseException: Неразборчивый номер: «ä ¢ è» ÅÒËÅèÍ » - PullRequest
0 голосов
/ 27 марта 2012

У меня есть одно поле в базе данных (Sql Server DB 2000) с полем varchar, в котором я сохранил тайское предложение (в форме Unicode). Я использую объект Locale для преобразования данных Unicode в тайское предложение следующим образом

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 ]

3 голосов
/ 27 марта 2012

Проблема не в строке 3; то есть дело не в том, как вы анализируете строку.

Содержимое thaiText повреждено из-за более ранней проблемы с кодировками. Вам нужно отследить, где текст идет плохо.

  • Текст может быть плох, прежде чем вы поместите его в базу данных.
  • Текст может испортиться, если вы поместите его в базу данных.
  • Текст может работать плохо, когда вы извлекаете его из базы данных.

Выясните, какой из вышеперечисленных является случай, и это скажет вам, где вам нужно решить проблему.

0 голосов
/ 27 марта 2012

Скорее всего, ваша проблема в том, что строка, которую вы читаете из базы данных, не декодируется правильно. Вы указали это в своих комментариях. Вы можете попробовать прочитать комментарии и ФОРМИРОВАТЬ кодировку. Это пример 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();

Убедитесь, что «данные» имеют правильную информацию, а затем декодируйте ее в число (если это имеет смысл), как вы уже делаете.

0 голосов
/ 27 марта 2012

Проблема в том, что данные, которые вы анализируете, имеют неправильную кодировку.

Вам необходимо выяснить, что это за данные, вы можете использовать «Инструмент преобразования наборов символов», например, такой: http://kanjidict.stc.cx/recode.php, выясните, что такое кодировка «ä ¢ è» ÅÒËÅèÍ »

, затем используйте следующий код для установки правильной кодировки.

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