How to use UTF-8 in resource properties with ResourceBundle

后端 未结 16 2241
难免孤独
难免孤独 2020-11-22 03:28

I need to use UTF-8 in my resource properties using Java\'s ResourceBundle. When I enter the text directly into the properties file, it displays as mojibake.

16条回答
  •  时光说笑
    2020-11-22 03:58

    I tried to use the approach provided by Rod, but taking into consideration BalusC concern about not repeating the same work-around in all the application and came with this class:

    import java.io.UnsupportedEncodingException;
    import java.util.Locale;
    import java.util.ResourceBundle;
    
    public class MyResourceBundle {
    
        // feature variables
        private ResourceBundle bundle;
        private String fileEncoding;
    
        public MyResourceBundle(Locale locale, String fileEncoding){
            this.bundle = ResourceBundle.getBundle("com.app.Bundle", locale);
            this.fileEncoding = fileEncoding;
        }
    
        public MyResourceBundle(Locale locale){
            this(locale, "UTF-8");
        }
    
        public String getString(String key){
            String value = bundle.getString(key); 
            try {
                return new String(value.getBytes("ISO-8859-1"), fileEncoding);
            } catch (UnsupportedEncodingException e) {
                return value;
            }
        }
    }
    

    The way to use this would be very similar than the regular ResourceBundle usage:

    private MyResourceBundle labels = new MyResourceBundle("es", "UTF-8");
    String label = labels.getString(key)
    

    Or you can use the alternate constructor which uses UTF-8 by default:

    private MyResourceBundle labels = new MyResourceBundle("es");
    

提交回复
热议问题