Я пытаюсь читать арабские и персидские ключи & значения из файла java вместо файла свойств с ResourceBundle, но он отображает неизвестные символы.Как читать арабский или персидский (ключ и значения) из java-файла с ResourceBundle
То, что я сделал, что я Кодовый 3 файлов, как: 1. LabelsBundle_en_US.java 2. LabelsBundle_ar_AE.java 3. LabelsBundle_fa_IR.java
Мой файл LabelsBundle_en_US.java выглядит следующим образом:
public class LabelsBundle_en_US extends ListResourceBundle{
static final Object[][] contents = {
{"REGISTER","Registration Form"},
{"USERNAME","Email"},
{"PASSWORD","Password"},
{"CONFIRM_PASS","Confirm Password"},
{"SUBMIT","Register"}
};
protected Object[][] getContents(){
return contents;
}
}//class
Мой файл LabelsBundle_fa_IR.java выглядит следующим образом:
public class LabelsBundle_fa_IR extends ListResourceBundle{
static final Object[][] contents = {
{"REGISTER","ثبت نام"},
{"USERNAME","ایمیل"},
{"PASSWORD","رمز"},
{"CONFIRM_PASS","مرور رمز"},
{"SUBMIT","ارسال"}
};
protected Object[][] getContents(){
return contents;
}
}//class
Вот мой сервлет:
protected void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException{
res.setContentType("text/html; charset=UTF-8");
req.setCharacterEncoding("UTF-8");
res.setCharacterEncoding("UTF-8");
StringWriter sWriter = new StringWriter();
PrintWriter out = new PrintWriter(sWriter);
String country = req.getParameter("country");
String language = req.getParameter("language");
Locale locale=null;
if(country == null){
locale = new Locale("en","US");
}
else{
locale = new Locale(language, country);
}
ResourceBundle rb = ResourceBundle.getBundle("com.i18n.resource.bundles.LabelsBundle",locale);
req.setAttribute("resource", rb);
out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">"+
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fi\" dir=\"auto\">"+
"<head>"+
"<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />"+
"<body>"+
"<center><h1>"+rb.getString("REGISTER")+"</h1></center>"+
"<table border=0 width=540 align=center>"+
"<tr><td colspan=2 align=center><h1>"+rb.getString("REGISTER")+"</h1></td></tr>"+
"<tr><td>"+rb.getString("USERNAME")+"</td><td><input type=text name=username></td></tr>"+
"<tr><td>"+rb.getString("PASSWORD")+"</td><td><input type=password name=password></td></tr>"+
"<tr><td>"+rb.getString("CONFIRM_PASS")+"</td><td><input type=password name=cPass></td></tr>"+
"<tr><td colspan=2 align=center><input type=submit value="+rb.getString("SUBMIT")+"></td></tr>"+
"</table></html>");
res.getWriter().print(sWriter.toString());
}//doGet
Этот код (ы) работают хорошо, когда язык en_US, но когда я изменить его на арабский или персидский, то его отображения как:
ط«ط¨طھ ظ†ط§ظ…
ط§غ Œ ظ ... غ Œ ظ «
ط ± ظ ... ط²
ظ ... ط ± ظط ± ط ± ظ ... ط² ط§ط ± ط³ط§ظ «
Пожалуйста посоветуйте
Ваше решение отлично подходит для файлов ListResourceBundle. Как вы посоветовали, я использовал файлы свойств и снова столкнулся с той же проблемой. Арабский и персидский не отображаются точно, но странные знаки с пакетом пакетов Java-пакетов – Ghayel
Ответ: «кодировка файла .properties определена: Latin 1». Поэтому, если вы ставите UTF-8, работа не работает. Вам нужно использовать native2ascii и преобразовать его в скрытую форму. Да, это неуклюже, но это стандартный, официальный способ сделать это. Это более надежно, чем в Java-источниках. Похоже, что UTF-8 .properties (наконец!) Запланировано для Java 9. –
'str = new String (rb.getString (ключ) .getBytes (« ISO-8859-1 »),« UTF-8 »); 'решена моя проблема – Ghayel