Comment réparer Invalide 1 octet 1 octets UTF-8 séquence
Je suis en train de chercher le code xml ci-dessous à partir de la db à l'aide d'une méthode en java mais j'obtiens une erreur
Code utilisé pour parser le xml
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource(new ByteArrayInputStream(cond.getBytes()));
Document doc = db.parse(is);
Element elem = doc.getDocumentElement();
//here we expect a series of <data><name>N</name><value>V</value></data>
NodeList nodes = elem.getElementsByTagName("data");
TableID jobId = new TableID(_processInstanceId);
Job myJob = Job.queryByID(_clientContext, jobId, true);
if (nodes.getLength() == 0) {
log(Level.DEBUG, "No data found on condition XML");
}
for (int i = 0; i < nodes.getLength(); i++) {
//loop through the <data> in the XML
Element dataTags = (Element) nodes.item(i);
String name = getChildTagValue(dataTags, "name");
String value = getChildTagValue(dataTags, "value");
log(Level.INFO, "UserData/Value=" + name + "/" + value);
myJob.setBulkUserData(name, value);
}
myJob.save();
Les Données
<ContactDetails>307896043</ContactDetails>
<ContactName>307896043</ContactName>
<Preferred_Completion_Date>
</Preferred_Completion_Date>
<service_address>A-End Address: 1ST HELIERST HELIERJT2 3XP832THE CABLES 1 POONHA LANEST HELIER JE JT2 3XP</service_address>
<ServiceOrderId>315473043</ServiceOrderId>
<ServiceOrderTypeId>50</ServiceOrderTypeId>
<CustDesiredDate>2013-03-20T18:12:04</CustDesiredDate>
<OrderId>307896043</OrderId>
<CreateWho>csmuser</CreateWho>
<AccountInternalId>20100333</AccountInternalId>
<ServiceInternalId>20766093</ServiceInternalId>
<ServiceInternalIdResets>0</ServiceInternalIdResets>
<Primary_Offer_Name action='del'>MyMobile Blue £44.99 [12 month term]</Primary_Offer_Name>
<Disc_Reason action='del'>8</Disc_Reason>
<Sup_Offer action='del'>80000257</Sup_Offer>
<Service_Type action='del'>A-01-00</Service_Type>
<Priority action='del'>4</Priority>
<Account_Number action='del'>0</Account_Number>
<Offer action='del'>80000257</Offer>
<msisdn action='del'>447797142520</msisdn>
<imsi action='del'>234503184</imsi>
<sim action='del'>5535</sim>
<ocb9_ARM action='del'>false</ocb9_ARM>
<port_in_required action='del'>
</port_in_required>
<ocb9_mob action='del'>none</ocb9_mob>
<ocb9_mob_BB action='del'>
</ocb9_mob_BB>
<ocb9_LandLine action='del'>
</ocb9_LandLine>
<ocb9_LandLine_BB action='del'>
</ocb9_LandLine_BB>
<Contact_2>
</Contact_2>
<Acc_middle_name>
</Acc_middle_name>
<MarketCode>7</MarketCode>
<Acc_last_name>Port_OUT</Acc_last_name>
<Contact_1>
</Contact_1>
<Acc_first_name>.</Acc_first_name>
<EmaiId>
</EmaiId>
L'ERREUR
org.apache.xerces.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
J'ai lu dans certains fils, c'est à cause de certains caractères spéciaux dans le fichier xml.
Comment résoudre ce problème ?
- Comme vous l'avez sûrement remarqué que votre question est difficile à comprendre sans une mise en forme appropriée.
- Cela n'aide pas que vous n'avez pas le code, mais je soupçonne votre fichier XML est fondamentalement non valide. Je soupçonne que c'est en prétendant être en UTF-8, mais n'est pas en UTF-8. Vous devriez corriger ce qu'il a de produire le mauvais fichier.
- Certainement vérifier la base de données; s'ils sont correctement stockés en tant que UTF-8, vérifiez si le connecteur java a besoin d'un réglage à l'UTF-8 (pour MySQL). Si la base de données est mal défini prenez la peine de passer à l'UTF-8 comme il est plus polyvalent.
- Salut, Pouvez-vous dire à quelqu'un où ce sera définie en db
- Pouvez-vous montrer un hex dump de la première quelques dizaines d'octets d'entrée?
- Aussi, vos données peuvent être un document XML valide fragment, mais il n'est certainement pas un document XML valide, car il y a plusieurs éléments à la racine, tandis que les documents XML doivent avoir exactement un élément racine donc
db.parse
aboutira pas, même après avoir corrigé le problème immédiat. - pour les adeptes, ce message d'erreur peut signifier que vous avez "bizarre octets" à la fin de votre document XML, pas nécessairement le début. Dans mon cas, c'était une somme de contrôle binaire choses à la fin qui n'était pas de l'UTF-8 valide, mais le début a tous 🙂
Vous devez vous connecter pour publier un commentaire.
Lire les données en utilisant le bon encodage des caractères. Le message d'erreur signifie que vous essayez de lire les données en UTF-8 (que ce soit délibérément ou parce que c'est le codage par défaut pour un fichier XML qui ne précise pas
<?xml version="1.0" encoding="somethingelse"?>
) mais il est en fait dans un autre encodage tels que ISO-8859-1 ou Windows-1252.Pour être en mesure de vous conseiller sur la façon dont vous devriez faire ce que j'aurais du voir le code que vous êtes en train d'utiliser pour lire le fichier XML.
Essayer:
Si c'est quelque chose d'autre que UTF-8, il suffit de changer l'encodage de la partie pour la bonne.
J'ai fait le xml comme une Chaîne de caractères et à l'aide de xml.getBytes() et obtenir cette erreur. Changer de xml.getBytes(jeu de caractères.forName("UTF-8")) a travaillé pour moi.
getBytes("UTF-8")
travaillé.J'ai eu ce problème, mais le fichier est en UTF-8, c'était juste que quelque part, sur le caractère était venu dans ce n'était pas encodé en UTF-8. Pour résoudre le problème j'ai fait ce qui est indiqué dans ce fil, c'est à dire j'ai validé le fichier:
Comment faire pour vérifier si un fichier est en UTF-8 valide?
Fondamentalement, vous exécutez la commande:
$ iconv -f UTF-8 your_file -o /dev/null
Et si il y a quelque chose qui n'est pas encodé en UTF-8, il vous donnera la ligne et les numéros de ligne de sorte que vous pouvez trouver.
Il m'est arrivé de rencontrer ce genre de problème en raison de l'Ant.
Que Ant fichiers pris et appliqué
filterchain expandproperties
à elle. Au cours de ce fichier de filtrage, ma machine Windows implicite de défaut non-UTF-8 codage de caractères a été utilisé pour générer les fichiers filtrés, donc les caractères en dehors de son jeu de caractères ne peut être mappé correctement.Une des solutions était de fournir Ant explicite variable d'environnement pour l'UTF-8.
Dans Cygwin, avant le lancement de la Fourmi:
export ANT_OPTS="-Dfile.encoding=UTF-8"
.J'ai rencontré le même problème et après une longue enquête de mon fichier XML, j'ai trouvé le problème: il y avait peu de sans échappement des caractères comme
«
»
.Ceux qui comme moi comprendre le caractère principes de codage, lire aussi l'article de Joel qui est drôle comme il contient des caractères incorrects de toute façon et ne peut toujours pas comprendre ce que le diable (spoiler alert, je suis utilisateur de Mac), puis votre solution peut être aussi simple que de la suppression de votre local repo et le clone de nouveau.
Mon code de base n'ont pas changé depuis la dernière fois qu'il était en cours d'exécution OK, donc il n'a pas de sens d'avoir UTF erreurs étant donné le fait que notre système de construction ne s'est jamais plaint à ce sujet....jusqu'à ce que je rappeler que j'ai accidentellement débranché mon ordinateur il ya quelques jours avec IntelliJ Idea et le tout en cours d'exécution (Java/Tomcat/Hibernate)
Mon Mac a fait un travail brillant que de faire semblant de rien n'était et je l'ai porté sur des affaires comme d'habitude mais le système de fichiers a été laissé endommagé en quelque sorte. Le gaspillage de l'ensemble de la journée à essayer de comprendre ça. J'espère que cela aide quelqu'un.
J'ai eu le même problème dans mon JSF application qui a été d'avoir une ligne de commentaire contenant certains caractères spéciaux dans les XMHTL page. Quand j'ai comparé la version précédente dans mon eclipse il avait un commentaire,
Supprimé ces caractères et la page bien chargé. Surtout, il est lié à des fichiers XML, donc merci de le comparer avec la version de travail.
J'ai eu le même problème. Mon problème était qu'il n'avait pas “-Dfile.encoding=UTF8” l'argument en vertu de la JAVA_OPTION dans statWeblogic.fichier cmd dans WebLogic server.