décoder la chaîne encodée en utf-8 format à android
J'ai une chaîne qui vient via un xml , et c'est le texte en allemand. Les caractères qui sont spécifiques en allemand sont encodés via le format UTF-8. Avant d'afficher la chaîne j'ai besoin de le décoder.
J'ai essayé ce qui suit:
try {
BufferedReader in = new BufferedReader(
new InputStreamReader(
new ByteArrayInputStream(nodevalue.getBytes()), "UTF8"));
event.attributes.put("title", in.readLine());
} catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
J'ai aussi essayé ceci:
try {
event.attributes.put("title", URLDecoder.decode(nodevalue, "UTF-8"));
} catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
Aucun d'entre eux travaillent. Comment décoder la chaîne allemande
vous en remercie d'avance.
UDPDATE:
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
//TODO Auto-generated method stub
super.characters(ch, start, length);
if (nodename != null) {
String nodevalue = String.copyValueOf(ch, 0, length);
if (nodename.equals("startdat")) {
if (event.attributes.get("eventid").equals("187")) {
}
}
if (nodename.equals("startscreen")) {
imageaddress = nodevalue;
}
else {
if (nodename.equals("title")) {
//try {
//BufferedReader in = new BufferedReader(
//new InputStreamReader(
//new ByteArrayInputStream(nodevalue.getBytes()), "UTF8"));
//event.attributes.put("title", in.readLine());
//} catch (UnsupportedEncodingException e) {
////TODO Auto-generated catch block
//e.printStackTrace();
//} catch (IOException e) {
////TODO Auto-generated catch block
//e.printStackTrace();
//}
//try {
//event.attributes.put("title",
//URLDecoder.decode(nodevalue, "UTF-8"));
//} catch (UnsupportedEncodingException e) {
////TODO Auto-generated catch block
//e.printStackTrace();
//}
event.attributes.put("title", StringEscapeUtils
.unescapeHtml(new String(ch, start, length).trim()));
} else
event.attributes.put(nodename, nodevalue);
}
}
}
Je ne pouvais pas trouver ce Q&quand j'en avais besoin. Donc j'ai retaged maintenant, j'espère que ce sera pop-up rapide la prochaine fois
OriginalL'auteur user590849 | 2011-04-29
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la Chaîne de constructeur avec le paramètre charset:
Aussi, puisque vous obtenir les données à partir d'un document xml, et je suppose qu'il est encodé en UTF-8, probablement le problème est dans l'analyse.
Vous devez utiliser
InputStream
/InputSource
au lieu d'unXMLReader
mise en œuvre, car il est livré avec l'encodage. Donc, si vous êtes l'obtention de ces données à partir d'une réponse http, vous pouvez soit utiliser les deuxInputStream
etInputSource
ou tout simplement de la
InputStream
:Mise à jour de 1
Voici un exemple complet d'une demande et de la réponse de la manipulation:
Mise à jour 2
Que le problème n'est pas de l'encodage mais la source xml étant échappé à des entités html, la meilleure solution est (en plus de corriger le php pour ne pas échapper à la réponse), l'utilisation de la apache.commons.lang bibliothèque's très utile
static StringEscapeUtils class
.Après l'importation de la bibliothèque, dans votre xml gestionnaire de
characters
méthode vous mettre les éléments suivants:Mise à jour 3
Dans ton dernier code, le problème est avec l'initialisation de la
nodevalue
variable. Il doit être:tu veux dire l'url d'où vous obtenez les données xml de la réponse?
oui. aussi ce qui est l'objet de la réponse que vous avez utilisé. est-il objet HttpResponse?
veuillez vérifier la mise à jour de la demande complète de la méthode. J'ai utilisé il y HttpPost, donc si vous avez besoin de définir une entité avec namevaluepair paramètres, vous pouvez encoder en "UTF-8".
puisque le problème n'était pas le décodage, vous pouvez le faire fonctionner avec seulement l'aide de l'apache commons
StringEscapeUtils
comme il est dans mon exemple ci-dessus. Vous devriez faire un essai avec le XMLReader + StringEscapeUtils.OriginalL'auteur rekaszeru