2017-07-24 2 views
2

J'ai un projet qui s'exécute sur WebSphere Liberty sous Linux. Ma langue est le portugais brésilien et nous avons quelques mots accentués. Mon code java définit certains messages de l'utilisateur comme ci-dessous:Codage de caractères étrange

... 
ErroResponse erroResponse = new ErroResponse(); 
erroResponse.setMensagem("Esse grupo não pode ser criado. Já existe um grupo criado com esse nome."); 
response = Response.status(Status.BAD_REQUEST).entity(erroResponse).build(); 
... 

Lorsque le même message est de montrer à l'utilisateur, il semble ainsi: enter image description here

Je ne pense pas que ce soit un problème d'encodage de navigateur, car le message est identique sur mes journaux de serveur. enter image description here

J'ai essayé de régler le codage de machine virtuelle Java en utilisant -Dclient.encoding.override -Dfile.encoding ISO-8859-1 et UTF-8, sans succès.

Le même projet, exécuté sur un serveur Windows, s'exécute sans problème, affichant les messages avec les accents corrects.

Seuls les messages qui ont été directement écrits dans le code source ont ce problème. Les mots accentués provenant du résultat de la requête de base de données sont correctement présentés.

J'utilise Suse 11.4.

J'apprécie vraiment toute aide.

Merci

+1

Une cause (ici peu probable) pourrait être que la source java est éditée comme UTF-8 mais compilée comme par exemple ISO-8859-1. (Plus souvent vu avec JSPs.) Essayez en utilisant '\ u00E3' au lieu de' ã' pour vérifier cela. –

+0

comment le forcer à compiler comme UTF-8 au lieu de ISO-8859-1? –

+0

@JoopEggen vous avez raison. Après votre commentaire, je pourrais trouver une solution. Merci. –

Répondre

0

Essayez de vérifier l'encodage de Suse et la langue, en faisant:

$ echo $LC_CTYPE 
ISO-8859-1 

$ echo $LANG 
pt_BR 

Obtenir toutes les langues:

$ locale -a 

Change to pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL" 
+0

J'ai essayé de définir sur pt_BR.utf8 et en_US.iso885915. Toujours sans succès. –

0

Il est probable que b Avant d'ajouter ces propriétés de codage JVM, vous obteniez l'encodage UTF-8 de ce caractère dans la réponse, mais votre navigateur ne voulait pas les interpréter comme UTF-8. Je suggère de les supprimer et de les conserver dans vos ressources JAX-RS. Une étape de débogage utile est de regarder le respone avec une commande comme client et éditeur hexadécimal (comme od -t x1) parce qu'il y a beaucoup de choses qui peuvent obscurcir quelles données sont réellement transmises (navigateur, émulateur de terminal, etc.).

Si vous indiquez explicitement au serveur d'utiliser un jeu de caractères (UTF-8 ou une page de codes locale comme ISO8859-1), vos chaînes seront transformées en page de codes spécifiée. Le navigateur verra également le jeu de caractères dans l'en-tête Content-Type.

La façon la plus simple est d'utiliser @Produces dans JAX-RS comme dans:

@Produces("text/html; charset=UTF-8") 

ou

@Produces("text/html; charset=ISO8859-1") 
0

Le problème a été résolu de changer le codage du texte du projet. Par défaut, eclipse enregistrait le code source en UTF-8 et javac le compilait en CP1252 (Windows par défaut).

Pour effectuer cette modification, j'ai dû faire un clic droit sur Projet -> Propriétés -> Ressource puis j'ai changé le codage du fichier texte en Autre (ISO-8859-1).