如何使用Java读取希腊文的属性文件

时间:2010-05-29 02:49:31

标签: encoding

我正在尝试从具有英文和中文键的属性文件中读取希腊语中的值。我的代码是这样的:

public class I18NSample {

   static public void main(String[] args) {

      String language;
      String country;

      if (args.length != 2) {
          language = new String("el");
          country = new String("GR");
      } else {
          language = new String(args[0]);
          country = new String(args[1]);
      }

      Locale currentLocale;
      ResourceBundle messages;

      currentLocale = new Locale(language, country);

      messages =
        ResourceBundle.getBundle("MessagesBundle",currentLocale, new CustomClassLoader("E:\\properties"));

      System.out.println(messages.getString("greetings"));
      System.out.println(messages.getString("inquiry"));
      System.out.println(messages.getString("farewell"));
   }
}

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;


public class CustomClassLoader extends ClassLoader {

    private String path;



    public CustomClassLoader(String path) {
        super();
        this.path = path;
    }



    @Override
    protected URL findResource(String name) {
        File f = new File(path + File.separator + name);
        try {
            return f.toURL();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        return super.findResource(name);
    }

}

MessagesBundle_el_GR.properties 问候=ρήμ。 χαιρετώ 告别=επιφ。 αντίο

inquiry =τικάνεισ,τικάνετε

我正在编译像这样的javac -encoding UTF8 CustomClassLoader.java javac -encoding UTF8 I18Sample.java

当我运行这个时,我得到乱码输出。如果本地文件是英语,法语或德语,它工作正常。 请帮忙。 问候, Subhendu

2 个答案:

答案 0 :(得分:0)

根据the documentation,属性文件似乎仅限于ISO 8859-1。但它们确实支持Unicode转义,链接文档有一个工具可以自动生成所述转义。

XML加载器允许使用UTF-8编码的XML。

javac选项仅适用于.java文件中的字符串文字,并且不对程序的运行时行为执行任何操作。

答案 1 :(得分:0)

感谢theatrus。

我试图直接读取属性文件,如下所示:

FileInputStream fis = new FileInputStream("E:\\properties\\MessagesBundle_el_GR.properties");
        DataInputStream dis = new DataInputStream(fis);
        BufferedReader br = new BufferedReader(new InputStreamReader(dis, "ISO-8859-7"));
        String strLine;
        while((strLine = br.readLine()) != null){
            System.out.println(strLine);
        }

        dis.close();

没有用。

我们可以将相同的信息放在数据库和数据库中。从那里读取。尽管在安装了mysql数据库的机器的终端中,当我们尝试从java代码中读取相同内容时,我们正确地以希腊文显示消息。它将变为乱码。将使用javac -encoding UTF8来帮助阅读数据库中的消息?

native2ascii工具不会有太大帮助,因为我们系统的用户不会同意承担所有的痛苦。用户已准备好使用数据库(因为我们将提供用于输入数据库的GUI)或属性文件。

此致


Subhendu