2009-07-01 13 views
2

J'ai besoin de coder un message de la requête et de l'écrire dans un fichier. Actuellement, j'utilise la méthode URLEncoder.encode() pour l'encodage. Mais il ne donne pas le résultat attendu pour les caractères spéciaux en français et en néerlandais.Encodage UTF en Java

J'ai essayé d'utiliser URLEncoder.encode("msg", "UTF-8") also.

Exemple:
Message original: Pour Gérer Votre GSM
Après encodage: Pour g Dürer Votre GSM

Peut-on me dire quelle méthode que je peux utiliser pour Cet objectif?

+0

Qu'est-ce que vous essayez de faire exactement? Pouvez-vous poster un extrait de code? URLEncoder.encode() est utilisé pour coder les URL (par exemple, = à% 3D), pas vraiment pour effectuer le codage de caractères. –

Répondre

1

essayer de faire quelque chose comme:

BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
             new FileOutputStream(file),"UTF-8")); 
0

Il y a beaucoup de causes pour le problème que vous avez observé. La cause principale est que REQUEST ne vous donne pas UTF-8 en premier lieu. J'imagine que cette situation changera avec le temps, mais actuellement il y a beaucoup de liens faibles qui pourraient être à blâmer: ni mySQL ni PHP5, html ni les navigateurs n'utilisent UTF-8 par défaut, bien que les données puissent être à l'origine.

Voir stackoverflow: how-do-i-set-character-encoding-to-utf-8-for-default-html

et java.sun.com: technicalArticles--HTTPCharset

J'ai connu ce problème avec le chinois, et que je recommande herongyang.com

0

Je me semble que tous les développeurs web unique dans le monde trébuche sur ce. Je voudrais signaler un article qui m'a beaucoup aidé:

http://java.sun.com/developer/technicalArticles/Intl/HTTPCharset/

Et si vous utilisez db2: this IBM developer works Article

D'ailleurs, je pense que les navigateurs ne prennent pas en charge Unicode dans les adresses , car il est facile de configurer une page d'hameçonnage lorsque vous utilisez des caractères d'une langue qui ressemblent à des caractères d'une autre langue.

0

non anglais Utilisez un encodage explicite lors de la création de la chaîne vous voulez envoyer:

final String input = ...; 
final String utf8 = new String(input.getBytes("UTF-8") , "UTF-8"); 
+0

Vous ne pouvez pas choisir (ou modifier) ​​l'encodage d'une chaîne en Java.Les encodages de caractères n'entrent en jeu que lorsque vous convertissez entre des chaînes et d'autres médias, comme l'écriture dans un fichier - et pour cela vous devez utiliser un OutputStreamWriter comme d'autres l'ont suggéré. 'new String (input.getBytes (" UTF-8 ")," UTF-8 ")' est juste un coûteux no-op. –

+0

@Alan M: Hmm, je vais vérifier cela. Nous avons eu quelques problèmes d'encodage lorsque le jeu de caractères par défaut sur la plate-forme était ISO-8859-1/15, nous avons donc inséré cette instruction pour la réparer. Si vous dites que c'est un non-op, cela ne fera pas de mal si nous l'enlevons, n'est-ce pas? – dhiller

+0

Droite. Notez que si vous le faisiez avec un encodage différent, comme ISO-8859-1, vous pourriez corrompre les données. Tous les caractères qui n'étaient pas couverts par ce codage seraient remplacés par du caractère indésirable dans la phase de codage, et le décoder à nouveau ne les récupérerait pas. Mais UTF-8 peut gérer n'importe quel personnage connu, donc tout ce que vous faites est de gaspiller des cycles d'horloge. –