Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

java.util.Properties and character encoding

java.util.Properties class (see Java SE 7 Javadoc) by default assumes ISO 8859-1 character encoding in reading and writing. So when a properties file is in other character encoding, you will see strange characters and behaviors.

Properties class has no method or constructor that takes encoding or locale parameter. Fortunately, in Java SE 6, two new methods were added to allow for reading from java.io.Reader and writing to java.io.Writer:


public synchronized void load(Reader reader) throws IOException;

public void list(PrintWriter out)
So you can create Reader or Writer instances with appropriate encoding, and pass them to Properties load or list methods. For example,

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.Properties;

import org.junit.Test;

public class MyTest {

@Test
public void loadPropertiesTest() throws Exception {
final File jndiPropertiesFile = new File(System.getProperty("user.home"), "tmp/jndi.properties");
final FileInputStream fileInputStream = new FileInputStream(jndiPropertiesFile);

// FileReader does not have any constructor that takes encoding, so use InputStreamReader instead
final InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8");

final Properties jndiProperties = new Properties();
jndiProperties.load(inputStreamReader);

//now dump the properties to verify
jndiProperties.list(System.out);
}
}
Output from running loadPropertiesTest test:

-- listing properties --
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=jnp://localhost:1099
java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces


This post first appeared on Java How To ..., please read the originial post: here

Share the post

java.util.Properties and character encoding

×

Subscribe to Java How To ...

Get updates delivered right to your inbox!

Thank you for your subscription

×