Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

StreamWriter et caractères bizarres venus de l'espace...

10 réponses
Avatar
Delf
Bonjour.

J'ai un drôle de problème :
Quand j'utilise StreamWriter avec un Encoding UTF-8, j'obtiens cette ligne :

<?xml version="1.0" encoding="UTF-8"?>

StreamWriter myWriter =
new StreamWriter(pConfigFilePath, false, Encoding.UTF8);

myWriter.Write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
myWriter.Write(myWriter.NewLine);
myWriter.Flush();
myWriter.Close();

Si je passe par ASCII, je n'ai plus les 3 caractères bizarres en début
de ligne.

Même problème quand je manipule un fichier XML et que je veux le
sauvegarder :

XMLDocument.Save(pFile);

<?xml version="1.0" encoding="UTF-8"?>

Précision, j'ai ces 3 caractères qu'au niveau de la première ligne des
fichiers...

D'où celà peut-il venir ?
Merci anticipé.

--
Delf

10 réponses

Avatar
Fred
"Delf" a écrit dans le message de news:
422eab69$0$31834$
Bonjour.

J'ai un drôle de problème :
Quand j'utilise StreamWriter avec un Encoding UTF-8, j'obtiens cette ligne
:

<?xml version="1.0" encoding="UTF-8"?>

StreamWriter myWriter > new StreamWriter(pConfigFilePath, false, Encoding.UTF8);

myWriter.Write("<?xml version="1.0" encoding="UTF-8"?>");
myWriter.Write(myWriter.NewLine);
myWriter.Flush();
myWriter.Close();

Si je passe par ASCII, je n'ai plus les 3 caractères bizarres en début de
ligne.

Même problème quand je manipule un fichier XML et que je veux le
sauvegarder :

XMLDocument.Save(pFile);

<?xml version="1.0" encoding="UTF-8"?>

Précision, j'ai ces 3 caractères qu'au niveau de la première ligne des
fichiers...

D'où celà peut-il venir ?
Merci anticipé.

--
Delf



Bonjour,
Il s'agit des "Byte Order Mark" qui permettent de reconnaître un fichier
encodé UTF-8.
Je crois qu'on peut désactiver leur ajout dans le fichier avec l'objet
StreamWriter.
Mais comment les vois-tu ? Même notepad sait gérer cela correctement et ne
les affiche pas !
Avatar
Cool6a
Essaye UTF-7, ça a marché pour moi en ce qui concerne les caractères
accentués, j'espere que ça va marché pour toi ;-)

"Fred" a écrit dans le message de
news:%

"Delf" a écrit dans le message de news:
422eab69$0$31834$
> Bonjour.
>
> J'ai un drôle de problème :
> Quand j'utilise StreamWriter avec un Encoding UTF-8, j'obtiens cette


ligne
> :
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> StreamWriter myWriter > > new StreamWriter(pConfigFilePath, false, Encoding.UTF8);
>
> myWriter.Write("<?xml version="1.0" encoding="UTF-8"?>");
> myWriter.Write(myWriter.NewLine);
> myWriter.Flush();
> myWriter.Close();
>
> Si je passe par ASCII, je n'ai plus les 3 caractères bizarres en début


de
> ligne.
>
> Même problème quand je manipule un fichier XML et que je veux le
> sauvegarder :
>
> XMLDocument.Save(pFile);
>
> <?xml version="1.0" encoding="UTF-8"?>
>
> Précision, j'ai ces 3 caractères qu'au niveau de la première ligne des
> fichiers...
>
> D'où celà peut-il venir ?
> Merci anticipé.
>
> --
> Delf

Bonjour,
Il s'agit des "Byte Order Mark" qui permettent de reconnaître un fichier
encodé UTF-8.
Je crois qu'on peut désactiver leur ajout dans le fichier avec l'objet
StreamWriter.
Mais comment les vois-tu ? Même notepad sait gérer cela correctement et ne
les affiche pas !




Avatar
Sylvain Collange
Delf a écrit :
J'ai un drôle de problème :
Quand j'utilise StreamWriter avec un Encoding UTF-8, j'obtiens cette
ligne :

<?xml version="1.0" encoding="UTF-8"?>



Si tu obtiens ça, c'est que tu essaie de lire ton fichier UTF-8 avec un
mauvais codage (Windows-1252 probablement). Avec quoi le lis-tu ?

Si tu veux vraiment supprimer ce caractère, tu peux créer ton
StreamWriter avec :
StreamWriter myWriter new StreamWriter(pConfigFilePath, false, new UTF8Encoding(false));

mais ça masquera simplement le problème jusqu'à ce que ton fichier
contienne un caractère non ASCII qui ne s'affichera pas correctement.

--
Sylvain Collange
Avatar
Delf
Fred wrote:

Bonjour,
Il s'agit des "Byte Order Mark" qui permettent de reconnaître un fichier
encodé UTF-8.



Ahhhh... :)

Je crois qu'on peut désactiver leur ajout dans le fichier avec l'objet
StreamWriter.
Mais comment les vois-tu ? Même notepad sait gérer cela correctement et ne
les affiche pas !



Avec UltraEdit. Jamais eu un tel problème avec.

--
Delf
Avatar
Delf
Sylvain Collange wrote:

Si tu obtiens ça, c'est que tu essaie de lire ton fichier UTF-8 avec un
mauvais codage (Windows-1252 probablement). Avec quoi le lis-tu ?



UltraEdit, encodage, aucune idée...

Si tu veux vraiment supprimer ce caractère, tu peux créer ton
StreamWriter avec :
StreamWriter myWriter > new StreamWriter(pConfigFilePath, false, new UTF8Encoding(false));



Finalement, ces caractères n'influent pas sur le fichier mais ce n'est
pas présentable.

--
Delf
Avatar
Delf
Cool6a wrote:

Essaye UTF-7, ça a marché pour moi en ce qui concerne les caractères
accentués, j'espere que ça va marché pour toi ;-)



Merci, je teste ca ce soir.

--
Delf
Avatar
Sylvain Collange
Delf wrote:
Sylvain Collange wrote:

Si tu obtiens ça, c'est que tu essaie de lire ton fichier UTF-8 avec
un mauvais codage (Windows-1252 probablement). Avec quoi le lis-tu ?




UltraEdit, encodage, aucune idée...



<troll>
Et avec un vrai éditeur de texte tu obtiens quoi?
</troll>
Plus sérieusement, il doit y avoir moyen de lui dire explicitement que
le fichier est en UTF-8...

Finalement, ces caractères n'influent pas sur le fichier mais ce n'est
pas présentable.



Non, non, ce caractère au début sert normalement à indiquer aux éditeurs
de texte que le fichier est en UTF-8, donc si tu l'enlève d'une part ça
masque le problème et en plus ça fait une indication de moins pour
l'éditeur (déjà qu'il a du mal avec...)

--
Sylvain Collange
Avatar
Ambassadeur Kosh
>> UltraEdit, encodage, aucune idée...



<troll>
Et avec un vrai éditeur de texte tu obtiens quoi?
</troll>
Plus sérieusement, il doit y avoir moyen de lui dire explicitement que le
fichier est en UTF-8...



pas à ma conaissance.
UltraEdit est un editeur a vocation binaire.
le texte est vu comme une suite d'octet...

sinon, je ne suis plus certain, mais soit c'est dans le XmlWriterSettings,
soit c'est dans l'Encoding (mais peut probable), soit c'est dans le Stream
sous jacent qu'on desactive la sortie des caracteres d'autodetect...
Avatar
Sylvain Collange
Ambassadeur Kosh a écrit :
UltraEdit est un editeur a vocation binaire.
le texte est vu comme une suite d'octet...



Ah oui, c'est bien ce que je disais, c'est pas un éditeur de texte ;-)

sinon, je ne suis plus certain, mais soit c'est dans le
XmlWriterSettings, soit c'est dans l'Encoding (mais peut probable),
soit c'est dans le Stream sous jacent qu'on desactive la sortie des
caracteres d'autodetect...



Dans l'encoding, en passant false au constructeur de UTF8Encoding.

Officiellement, l'utilisation de la BOM en UTF-8 est plutôt
déconseillée par Unicode, mais perso je vois pas ce que ça peut faire
de mal. Au pire en concaténant deux fichiers ça rajoute un «
zero-width no-break space » au milieu…

--
Sylvain Collange
Avatar
Delf
Sylvain Collange wrote:

Si tu veux vraiment supprimer ce caractère, tu peux créer ton
StreamWriter avec :
StreamWriter myWriter > new StreamWriter(pConfigFilePath, false, new UTF8Encoding(false));



Là, les caractères disparaissent. Mais pas avec la méthode Save() de
XmlDocument. Enfin bref, pas très grave.
Merci.

--
Delf