2016-05-18 23 views
2

á、í、čなどの発音記号を使用して表示する際に問題があります .propertiesファイルをISO 8599-1のUTF-8に設定しましたが、次のコードを実行すると私は結果を望んでいない。JavaFX多言語.propertiesファイルのエンコーディング

メインクラス:

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

ログインフレームコントローラクラス:

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

、ボタン上のテキストは完全に罰金です。自分のプロジェクト全体にグローバルなエンコード設定をいくつか設定して、各クラスの各コンポーネントでエンコーディングを指定する必要はありませんか?ありがとう。

答えて

3

いくつかのこと:

  • 何も意味しない "ISO 8599から1をUTF-8に.propertiesファイルを設定します"。 UTF-8またはISO 8859-1の両方ではなく
  • あなたのプロパティファイルはディスク上のUTF-8エンコーディングになっているようです(16進エディタで確認できます - 特殊文字ごとに2バイトが表示されます)
  • ResourceBundle initializerに渡すロケールは、言語/文字セットのデコードに役立たず、適切なバンドルを選択するためにのみ使用されます。あなたの名前で自分を_skを渡している場合、それはおそらく必要とされていない
  • たResourceBundleは、私が理解から、デフォルトでのみISO 8859-1を理解し、私はすべてのSKの文字があるとは思わないが

何UTF-8でエンコードされたリソースバンドル(あなたが偶然持っていると思われる)が必要です。説明方法はこちらをご覧ください。 How to use UTF-8 in resource properties with ResourceBundle