Les caractères spéciaux ou accentués
Je suis en train de faire un travail pour un client français, et donc le besoin de traiter avec des caractères accentués. Mais je suis en cours d'exécution dans beaucoup de difficulté, je suis en espérant que la solution est simple et que quelqu'un peut le point hors de moi.
La chaîne: La Forêt pour Témoin
est converti à: La For? pour T?oin
Note le caractère manquant suivant le caractère accentué la t à la suite de la ê et la m à la suite de la é.
J'ai essayé d'utiliser StringEscapeUtils qui a réussi à s'échapper certains caractères, tels que ®. J'ai aussi crée mon propre fonction d'échappement qui produit les mêmes résultats (® de travail, ê ne sera pas).
private String escapeChars(String string) {
char[] chars = string.toCharArray();
String result = "";
for (int i = 0; i < chars.length; i++) {
int c = chars[i];
result += "&#" + c + ";";
}
return result;
}
Le projet est en cours d'exécution dans eclipse à l'aide de l'App Engine plugin, je ne peut pas déterminer si le problème est causé par Java, App Engine, ou SQLite.
Toute aide est appréciée.
EDIT: j'ai trouvé que la chaîne de caractères sont mal formés lors de simplement afficher le paramètre de la requête à partir d'un formulaire. (c'est à dire, demande.getParameter("string") a déjà un contenu incorrect).
J'ai essayé le méta-tag proposé par Daniel, sans succès. Je pense que vous êtes sur la bonne voie cependant, les données d'en-tête d'un document html suivant:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Lorsque les caractères accentués sont codés en dur dans une page JSP, elles sont affichées comme prévu.
EDIT: j'ai également ajouté <?xml version="1.0" encoding="UTF-8"?>
au tout début de la page.
Je suis très proche d'une solution. J'ai trouvé que si je change l'encodage de la page dans le navigateur des données de formulaire est transmis au serveur correctement. Je ne peux pas comprendre comment faire le navigateur détecter automatiquement le codage de la page.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
RÉSOLU: je ne pouvais pas travailler sur la façon de rendre le navigateur auto-détecter l'encodage UTF-8 de java par défaut. J'ai donc forcé de codage de caractères ISO-8859-1 en utilisant la demande.setCharacterEncoding("ISO-8859-1").
Si les paramètres de la demande résultant de la soumission d'un formulaire sont incorrectes, puis le navigateur est certainement essayer d'utiliser l'auto-détecté jeu de caractères qui ne peuvent pas représenter les caractères accentués. Essayez d'ajouter:
<?xml version="1.0" encoding="UTF-8"?>
au tout début du document, pas précédée par des espaces; ce doit être les premiers caractères du document XHTML.OriginalL'auteur klonq | 2010-06-22
Vous devez vous connecter pour publier un commentaire.
Cela peut avoir trois causes:
C'est une requête GET et le serveur n'est pas configuré pour utiliser UTF-8 pour analyser l'URI de la requête. Il est difficile de savoir sur quel serveur vous êtes en utilisant, voici donc un Tomcat-réponse ciblée à titre d'exemple: set
URIEncoding
attribut de la Connecteur HTTP dans/conf/server.xml
àUTF-8
.Si c'est une requête POST, alors vous devez vous assurer que le servletcontainer utilise UTF-8 pour coder le corps de la requête. Vous pouvez le faire par
request.setCharacterEncoding("UTF-8")
à l'avance.La console qui vous êtes en train de rédiger le paramètre à ne supporte pas l'UTF-8. Il est difficile de la console qui vous parlez, voici donc une Éclipse-réponse ciblée à titre d'exemple: dans Fenêtre > Préférences > Général > espace de travail > Texte de Codage de Fichiers mis en UTF-8.
Voir aussi:
OriginalL'auteur BalusC
Ok, donc le premier problème est que vous devez trouver l'endroit où les données sont perdues.
Vous n'avez pas vraiment dit où les choses vont mal, mais je préfère attendre que si vous trier le codage des caractères, le reste devrait se mettre en place. Peut-être SQLite a des problèmes, mais j'en doute...
OriginalL'auteur Jon Skeet
Vous devez vous assurer que le code HTML qui est envoyé au navigateur a un jeu de caractères. Vous devrait à la fois renvoyer
Content-Type: text/html; charset=UTF-8
comme une tête de réponse HTTP et inclure, comme le premier élément enfant de l'head
tag:Ou, si vous êtes en utilisant XHTML:
Mais juste avoir l'
meta
balise peut souvent résoudre le problème.Aussi, assurez-vous que votre code HTML est valide en utilisant la Le W3C Markup Validation Service.
Voir aussi: FAQ: des caractères Bizarres et des points d'interrogation apparaissent à la place des caractères accentués
OriginalL'auteur Daniel Trebbien
Est-il possible que la chaîne est dans le tact, mais vous essayez d'imprimer ces personnages avec un en-us localisation?
Content-Language
champ ne fait aucune différence que ce soit. Le problème ici est que le jeu de caractères du fichier HTML est différent du jeu de caractères du serveur est de déchiffrer le fichier avec et raconter le client à déchiffrer le fichier. La localisation dans ce cas, ne fait aucune différence.OriginalL'auteur ktingle