JavaFX 多语言 .properties 文件编码

标签 java javafx encoding multilingual

我在显示带有 á、í、č 等变音符号的字符时遇到问题。 我已经使用 ISO 8599-1 将 .properties 文件设置为 UTF-8,但是当我运行以下代码时,我没有想要的结果。

主类:

@Override
    public void start(Stage primaryStage) throws Exception{
        FXMLLoader fxmlLoader = new FXMLLoader();
        fxmlLoader.setResources(ResourceBundle.getBundle("bundles.language_sk", new Locale("sk", "SK")));
            Parent root = fxmlLoader.load(getClass().getResource("/view/loginFrame.fxml"));
            primaryStage.setTitle("Login");
            Scene scene = new Scene(root, 563, 580);
            primaryStage.setScene(scene);
            primaryStage.setResizable(false);
            primaryStage.show();
        }

登录框架 Controller 类:

@Override
    public void initialize(URL location, ResourceBundle resources) {
        ResourceBundle bundle = ResourceBundle
                .getBundle("bundles.language_sk", new Locale("sk", "SK"));
        setLoginBtnText(bundle);
    }

    public void setLoginBtnText(ResourceBundle bundle){
            loginBtn.setText(bundle.getString("loginButton"));
    }

language_sk.properties 文件:

#LOGIN FRAME
.
.
loginButton=Prihlásiť
.
.

结果:

enter image description here

如您所见,我尝试使用 .properties 文件设置登录按钮的文本,但字符乱七八糟。

尽管当我在 setLoginBtnText 方法中使用此代码时:

 public void setLoginBtnText(ResourceBundle bundle){
        String val = bundle.getString("loginButton");
        try {
            loginBtn.setText(new String(val.getBytes("ISO-8859-1"), "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

那么按钮上的文字就完全没问题了。如何为我的整个项目设置一些全局编码设置,这样我就不必在每个类的每个组件上指定编码?谢谢。

最佳答案

一些事情:

  • “使用 ISO 8599-1 将 .properties 文件设置为 UTF-8”没有任何意义。它是 UTF-8 或 ISO 8859-1,不能同时是
  • 您的属性文件似乎在磁盘上采用 UTF-8 编码(您可以使用十六进制编辑器进行检查 - 您会看到每个特殊字符有两个字节)
  • 您传递给 ResourceBundle 初始值设定项的语言环境无助于语言/字符集解码,它仅用于选择合适的包;如果您自己以名称传递 _sk,则可能不需要
  • 根据我的理解,ResourceBundle 默认只理解 ISO 8859-1,我不认为所有 SK 字符都在那里

您需要的是 UTF-8 编码的资源包(您似乎是偶然拥有的)并按原样加载它。请在此处查看有关操作方法的说明 How to use UTF-8 in resource properties with ResourceBundle

关于JavaFX 多语言 .properties 文件编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37291995/

相关文章:

java - 将字节转换为文件输入流

java - httpSession.getAttribute ("userId") 在来自 Angular 前端的一些频繁的 API 请求后,在 Spring Boot 中返回 null

user-interface - JavaFX 中的自定义节点绘制

macos - Mac OS X、Java 7 : createNewFile filename encoding

Python编码/解码问题

Java Web Start 应用程序在 XMonad 上显示空窗口

Java插入排序对象的数组列表?

java - 对两个对应的数组进行排序时出错

java - 如何使用循环填充 FXCollections.observableArrayList? [javafx]

encoding - 如何对非 ASCII 字符串和非整数进行 Bencode?