No, that isn't the question. Or that's only one of the possible questions.
The answer to one possible question is to follow the rules and use ISO-8859-1 as the encoding for your properties file. Note that it's possible to do that for French text without having to mess about with Unicode escapes.
The answer to that question might be to not use ResourceBundle, which I expect follows the existing rules for properties files, and to use various Java 6 features which allow you to specify the charset while reading a properties file in your own substitute for ResourceBundle. Or it might be to use an XML-formatted properties file, for which the charset does default to UTF-8, if a ResourceBundle could use that.
Joined: Sep 20, 2001
For now I use a ResourceBundle.Control to solve to problem.
It's definitely an encoding issue. I just wrote a little test program; if the properties file is encoded using ANSI I get the expected output, but if I save it using UTF-8 I get the mess you got. I also get the same results if I use java.util.Properties with a FileReader with the system encoding. Only if I switch that do I get the actual content.
So that's what we need to do for ResourceBundle as well. ResourceBundle itself doesn't have any methods / constructors to help us with, so we have to go to ResourceBundle.Control. I've checked the source (available in src.zip inside the JDK folder), and it uses a PropertyResourceBundle combined with an InputStream. And guess what - this uses Properties.load with an InputStream, thereby getting the same problem as I got with a direct Properties object.
The solution is obvious - create a new ResourceBundle.Control subclass, and override newBundle to use a Reader instead of an InputStream. The following is my quick (but tested and working) attempt:
I'm actually disappointed that Sun/Oracle haven't provided such a class themselves.