pveeckhout
pveeckhout

Reputation: 147

UTF-8Characters not displayed correctly in

we are working on a project for school, The project is mandatory tri-lingual (dutch, english and french) , so the answer "Change to English will not do".

All our classes and resource files are encoded in UTF-8 format, and alle non-standar english characters are diplayed correctly in the classes themself.

the problem is that once we try to display our text, alle non-standard english characters are distorted.

We hear alot that this is due to an encoding issue, but I sincerly doubt that, since our whole project is encode in UTF-8.

here is extract from the french resource bundle:

VIDEOSETTINGS = Réglages du Vidéo
SOUNDSETTINGS = Réglages du son
KEYBINDSETTINGS = Keybind Paramètres
LANGUAGESETTINGS = Paramètres de langue
DIFFICULTYSETTINGS = Paramètres de Difficulté
EXITSETTINGS = Sortie les paramètres

and this results in these following displayed strings.

display result for provided resourcebundle extract

I would be most gratefull for a solution for this problem

EDIT

for extra info we are building a desktop app using Swing.

Upvotes: 1

Views: 1549

Answers (2)

Michael Konietzka
Michael Konietzka

Reputation: 5499

You didn't show some code, where you read the resource files. But if you use PropertyResourceBundle with an InputStream in the constructor, the InputStream must be encoded in ISO-8859-1. In that case, characters that cannot be represented in ISO-8859-1 encoding must be represented by Unicode Escapes.

You can use native2ascii or AnyEdit as tools to convert Properties to unicode escapes, see Use cyrillic .properties file in eclipse project

Upvotes: 2

erickson
erickson

Reputation: 269667

This is due to an encoding issue.

You are using the wrong decoder (probably ISO-8859-1) on UTF-8 encoded bytes.

Are these strings stored in a file? How are you loading the file? Via the Properties class? The Properties class always applies ISO-8859-1 decoding when loading the plain text format from an InputStream. If you are using Properties, use the load(Reader) overload, switch to the XML format, or re-write the file with the matching encoding. Also, if you are using Resource.getBundle() to load a properties file, you must use ISO-8859-1 encoding to write that file, escaping any non-Latin characters.

Since this is an encoding issue, it would be most helpful if you posted the code you have used to select the character encoding.

Upvotes: 3

Related Questions