Как преобразовать символы Юникода в правильные символы языка в Java? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть одно поле в базе данных с полем varchar, в котором я храню тайское предложение (в форме Unicode).

Мне нужно разобрать символы Unicode в правильную строку, которая правильно отображает тайские символы.

Мой код для отображения тайских символов с помощью объекта Locale с помощью 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);

мне нужен код для отображения последовательности тайских символов.

Ответы [ 4 ]

1 голос
/ 26 марта 2012

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

Поскольку возможно, что механизм хранения / извлечения БД мог повредить вашу тайскую строку.

После того, как вы убедились, что эти символы, которые вы получаете из БД, находятся в правильной форме, вы можете просто использовать следующий код, чтобы разобрать символы обратно в число с плавающей точкой.

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

Но прежде всего убедитесь, что тайские символы правильно возвращаются из БД.

0 голосов
/ 03 июля 2014
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 в путь к классу.

0 голосов
/ 09 мая 2012

У меня работает следующий код для отображения тайского языка в NetBeans.

     String strThai ="";
    if (rs.getString(i) != null )
        strThai= new String(rs.getString(i).getBytes("ISO8859_1"),"TIS-620");

где rs - это ResultSet из базы данных.

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

У вас уже есть код для преобразования двойного в строку через определенный языковой стандарт. Вы можете добиться обратного (преобразовать строку в удвоение), вызвав функцию parse() для объекта NumberFormat:

double num = nf.parse(outputString).doubleValue();

Вам нужно вызвать doubleValue() по результату parse(), поскольку он возвращает Number, а не double напрямую.

Вы должны быть готовы к перехвату ParseException (java.text.ParseException) при вызове parse(), поскольку переданная строка может быть недопустимым числом (по крайней мере, насколько известно parse). *

В приведенном выше коде используется переменная outputString, объявленная в коде в вопросе.

...