Java; Essayez de convertir une Chaîne de caractères qui contient l'ISO-8859-1 le codage UTF-8, mais le fichier est en UTF-8
Je ne sais pas si cela va faire sens, mais c'est ce que je faire.
Je travaille avec Eclipse en utilisant l'encodage UTF-8 pour tous mes fichiers. Dans l'un d'eux j'ai besoin de convertir une Chaîne de caractères ISO-8859-1 à UTF-8. Cependant cette chaîne est formée dans le fichier lui-même (qui ne vient pas de l'entrée) c'est pourquoi je crois que ma Chaîne de caractères en UTF-8 et la conversion ne se passent pas comme je l'espérais.
La Chaîne de contenu d'origine est:
||3.2|2013-01-25T17:24:00|ingreso|PAGO EN UNA SOLA EXHIBICION|6386.21|MXN|7408.00|No identificado|NAUCALPAN DE JUÁREZ, ESTADO DE MEXICO|CAOS640116HT5|OSCAR MARTIN CARRERA|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JUÁREZ|ESTADO DE MEXICO|MÉXICO|53100|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JUÁREZ|ESTADO DE MEXICO|MÉXICO|53100|Persona Física con Actividad Empresarial|BAÑ930616R66|BAÑOMOBIL, S.A. DE C.V.|Av. 1° de Mayo|197|San. Lorenzo|TLALNEPANTLA DE BAZ|ESTADO DE MEXICO|MÉXICO|54047|1|NO APLICA|Dominio .com|Dominio por 1 año www.sanitariosportatiles.com|586.21|586.21|1|NO APLICA|Hospedaje 2 Gb|Hospedaje 2 Gb por 1 año www.sanitariosportatiles.com|5800.00|5800.00|IVA|16.00|1021.79|1021.79||
Originalité de l'encodage ISO-8859-1 et quand je la convertir en UTF-8, il doit générer.
||3.2|2013-01-25T17:05:06|ingreso|PAGO EN UNA SOLA EXHIBICION|6386.21|MXN|7408.00|No identificado|NAUCALPAN DE JUÃREZ, ESTADO DE MEXICO|CAOS640116HT5|OSCAR MARTIN CARRERA|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JUÃREZ|ESTADO DE MEXICO|MÉXICO|53100|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JUÃREZ|ESTADO DE MEXICO|MÉXICO|53100|Persona FÃsica con Actividad Empresarial|BAÑ930616R66|BAÑOMOBIL, S.A. DE C.V.|Av. 1° de Mayo|197|San. Lorenzo|TLALNEPANTLA DE BAZ|ESTADO DE MEXICO|MÉXICO|54047|1|NO APLICA|Dominio .com|Dominio por 1 año www.sanitariosportatiles.com|586.21|586.21|1|NO APLICA|Hospedaje 2 Gb|Hospedaje 2 Gb por 1 año www.sanitariosportatiles.com|5800.00|5800.00|IVA|16.00|1021.79|1021.79||
Ce dont j'ai besoin, et je ne suis pas l'atteindre.
c'est ce que j'ai essayé jusqu'à présent.
String input = null;
input = "||3.2|2013-01-25T17:24:00|ingreso|PAGO EN UNA SOLA EXHIBICION|6386.21|MXN|7408.00|No identificado|NAUCALPAN DE JUÁREZ, ESTADO DE MEXICO|CAOS640116HT5|OSCAR MARTIN CARRERA|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JUÁREZ|ESTADO DE MEXICO|MÉXICO|53100|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JUÁREZ|ESTADO DE MEXICO|MÉXICO|53100|Persona Física con Actividad Empresarial|BAÑ930616R66|BAÑOMOBIL, S.A. DE C.V.|Av. 1° de Mayo|197|San. Lorenzo|TLALNEPANTLA DE BAZ|ESTADO DE MEXICO|MÉXICO|54047|1|NO APLICA|Dominio .com|Dominio por 1 año www.sanitariosportatiles.com|586.21|586.21|1|NO APLICA|Hospedaje 2 Gb|Hospedaje 2 Gb por 1 año www.sanitariosportatiles.com|5800.00|5800.00|IVA|16.00|1021.79|1021.79||";
String intento1 = null, intento2 = null, intento3 = null;
try {
intento1 = new String(input.getBytes("ISO-8859-1"),"UTF-8");
intento2 = new String(intento1.getBytes(), "UTF-8");
intento3 = new String(input.getBytes(),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(intento1);
System.out.println(intento2);
System.out.println(intento3);
Qui renvoie
||3.2|2013-01-25T17:24:00|ingreso|PAGO EN UNA SOLA EXHIBICION|6386.21|MXN|7408.00|No identificado|NAUCALPAN DE JU?REZ, ESTADO DE MEXICO|CAOS640116HT5|OSCAR MARTIN CARRERA|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JU?REZ|ESTADO DE MEXICO|M?XICO|53100|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JU?REZ|ESTADO DE MEXICO|M?XICO|53100|Persona F?sica con Actividad Empresarial|BA?930616R66|BA?OMOBIL, S.A. DE C.V.|Av. 1? de Mayo|197|San. Lorenzo|TLALNEPANTLA DE BAZ|ESTADO DE MEXICO|M?XICO|54047|1|NO APLICA|Dominio .com|Dominio por 1 a?o www.sanitariosportatiles.com|586.21|586.21|1|NO APLICA|Hospedaje 2 Gb|Hospedaje 2 Gb por 1 a?o www.sanitariosportatiles.com|5800.00|5800.00|IVA|16.00|1021.79|1021.79||
||3.2|2013-01-25T17:24:00|ingreso|PAGO EN UNA SOLA EXHIBICION|6386.21|MXN|7408.00|No identificado|NAUCALPAN DE JU?REZ, ESTADO DE MEXICO|CAOS640116HT5|OSCAR MARTIN CARRERA|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JU?REZ|ESTADO DE MEXICO|M?XICO|53100|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JU?REZ|ESTADO DE MEXICO|M?XICO|53100|Persona F?sica con Actividad Empresarial|BA?930616R66|BA?OMOBIL, S.A. DE C.V.|Av. 1? de Mayo|197|San. Lorenzo|TLALNEPANTLA DE BAZ|ESTADO DE MEXICO|M?XICO|54047|1|NO APLICA|Dominio .com|Dominio por 1 a?o www.sanitariosportatiles.com|586.21|586.21|1|NO APLICA|Hospedaje 2 Gb|Hospedaje 2 Gb por 1 a?o www.sanitariosportatiles.com|5800.00|5800.00|IVA|16.00|1021.79|1021.79||
||3.2|2013-01-25T17:24:00|ingreso|PAGO EN UNA SOLA EXHIBICION|6386.21|MXN|7408.00|No identificado|NAUCALPAN DE JU?REZ, ESTADO DE MEXICO|CAOS640116HT5|OSCAR MARTIN CARRERA|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JU?REZ|ESTADO DE MEXICO|M?XICO|53100|CTO. ORADORES 33|33|CD. SATELITE|NAUCALPAN DE JU?REZ|ESTADO DE MEXICO|M?XICO|53100|Persona F?sica con Actividad Empresarial|BA?930616R66|BA?OMOBIL, S.A. DE C.V.|Av. 1? de Mayo|197|San. Lorenzo|TLALNEPANTLA DE BAZ|ESTADO DE MEXICO|M?XICO|54047|1|NO APLICA|Dominio .com|Dominio por 1 a?o www.sanitariosportatiles.com|586.21|586.21|1|NO APLICA|Hospedaje 2 Gb|Hospedaje 2 Gb por 1 a?o www.sanitariosportatiles.com|5800.00|5800.00|IVA|16.00|1021.79|1021.79||
Qui n'est pas près de ce que je veux.
EDIT 1: Quand je reçois la Chaîne de caractères à partir d'une Entrée de l'un des conversions beau travail, mais j'en ai besoin pour le travail déclarées dans le fichier.
EDIT 2: C'est en gros ce que j'ai besoin de http://cryptosys.net/cgi-bin/manual.cgi?m=pki&nom=CNV_UTF8FromLatin1 mais en java
Vous devez vous connecter pour publier un commentaire.
En Termes Simples ,si vous voulez convertir charset=iso-8859-1 pour java string (qui est de l'UTF-8 par défaut)
Je pense que le problème fondamental ici est à vos attentes.
Si je vous comprends bien, vous devriez être en mesure de changer
Á
àÃ
par la modification de l'encodage des caractères. Qui ne peut pas se produire. Ceux sont des caractères différents; c'est à dire les différents points de code -Á
est Unicode codepoint 00C1 (ou C1 en ISO-8859-1) etÃ
est 00C3 /C3.Ainsi, lorsque vous transcoder un
Á
en ISO-8859-1 en Unicode UTF-8, vous devrait obtenir exactement le même caractèreÁ
. Si vous n'avez pas le cas, alors la traduction serait rompu.Vous attendent également
MÉXICO
traduireMÉXICO
... qui semble totalement bizarre pour moi. Peut-être il y a un problème dans votre transcription des caractères dans la Question ...Maintenant, si la lexicographie des règles pour votre langue /région dire que
Á
àÃ
sont en fait équivalentes, alors il serait raisonnable de "normaliser" à une forme préférée. Cependant, il n'est pas le rôle de l'encodage /décodage de faire de tels paramètres régionaux liés à la traduction. Vous avez besoin de coder vous-même ... ou de trouver une autre bibliothèque qui fait.Déconner au niveau de l'octet (encodage avec un encodage et de décodage avec une autre) ne va pas à "corriger" ce. Si quelque chose, il va faire empirer les choses. Votre déconner est la génération de séquences d'octets qui ne peut pas être associé à la cible schéma de codage ... et donc la question des marques.
MÉXICO
pour de vrai? Il semble bizarre ... dans mon navigateur)J'ai enfin réussi à montrer la façon dont je l'ai précisé dans la question, j'étais juste en utilisant le mauvais jeu de caractères.
Cette affiche de la façon que je besoin d'elle.
Lors du chargement de toutes les données de représentation binaire, vous devez savoir de quel encodage est utilisé pour que la représentation afin d'interpréter ou de les décoder. Si vous assumez le mauvais encodage, alors vous obtiendrez probablement des ordures -- quelque chose qui n'a pas de sens.
Afin de construire une Chaîne à partir de données binaires, vous devez spécifier l'encodage de la source de données. Sinon vous risquez d'obtenir des ordures -- la construction de la Chaîne ne peut pas contenir les caractères représentés dans la source de données.
Plus spécifiquement pour votre cas, si vous essayez de charger des données UTF-8 à l'aide de l'ISO-8859-1 codage, vous pouvez obtenir des ordures. Je dis "peut", parce que ces deux codages vraiment avoir beaucoup de chevauchement: le faible 127 points de code (si je me souviens bien). Si seulement ces faibles 127 points de code sont utilisés, le décodage peuvent "travailler", mais comme ce n'est pas garanti qu'il ne doit pas être invoqué.
Si vous dites Éclipse de décoder les fichiers sources en UTF-8, alors vous ne devez modifier les fichiers source à l'aide d'un éditeur capable de et configuré pour montage en utilisant l'encodage UTF-8.
Un point de plus: La représentation interne de données String en Java est de l'UTF-16. Par conséquent, il est inexact de dire que vous avez des Chaînes qui contiennent de l'ISO-8859-1" codage. Si vous avez une Chaîne, vous avez toujours les données UTF-16. Que ce soit ou pas que les données sont correctes ou pas dépend de la façon dont vous avez construit la Chaîne, comme discuté ci-dessus.