Ecriture dans un fichiers texte de type "batch" (.cmd, .bat) avec des accents

Le
D.Hinnen
Bonjour tout-le-monde !

Je cherche à écrire depuis vb.net dans un fichier batch.
Le problème que je rencontre est l'encodage, cad des accents lus
correctement depuis Windows (éàè mais aussi öäü) ne sont pas interprétés
correctement sous cmd.

Le code pour ce faire est simple:
Dim fp As New System.IO.FileStream(pFileName,
FileMode.OpenOrCreate, FileAccess.Write)
Dim vStream As New StreamWriter(fp) ', vEncodingTo)
With vStream
.BaseStream.Seek(0, SeekOrigin.End)
.Write(vContent)
.Flush()
.Close()
End With

Une particularité est dans la ligne:
> Dim vStream As New StreamWriter(fp) ', vEncodingTo)
qui peut être écrite
> Dim vStream As New StreamWriter(fp, vEncodingTo)
et donc contenir un paramêtre de type System.Text.Encoding, donc ar
exemple UTF7, UTF8, ASCII ou Unicode.

Aucun de ces encodages permet la relécture correcte sous cmd.

J'ai aussi essayé de convertir l'encodage du contenu (vContent) avant de
l'écrire - sans succés ;(

Est-ce que qqun connais le problème et peut m'aider ?

Merci d'avance

Dominique

PS: Non, je ne peux éviter les accents, certains fichiers du client
contenants des accents dans leurs noms.
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Winsysbee
Le #12443121
peux tu nous donner la valeur de ta variable vContent ainsi que l'os d'execution du code et l'os d'execution du bat.
Ton code est bon, je pense que c'est plutot ce que tu mets dans le fichier qui doit ?tre mauvais.
Si j'ai bien compris, le fichier bat que tu ecris, tu dois le faire tourner en ligne de commande, et cela ne fonctionne pas ?

WinSysBee Support Team
http://www.winsysbee.com


nntp://news.free.fr/microsoft.public.fr.dotnet.vb/ >

Bonjour tout-le-monde !

Je cherche ? ?crire depuis vb.net dans un fichier batch.
Le probl?me que je rencontre est l'encodage, cad des accents lus
correctement depuis Windows (??? mais aussi ???) ne sont pas interpr?t?s
correctement sous cmd.

Le code pour ce faire est simple:
Dim fp As New System.IO.FileStream(pFileName,
FileMode.OpenOrCreate, FileAccess.Write)
Dim vStream As New StreamWriter(fp) ', vEncodingTo)
With vStream
.BaseStream.Seek(0, SeekOrigin.End)
.Write(vContent)
.Flush()
.Close()
End With

Une particularit? est dans la ligne:
> Dim vStream As New StreamWriter(fp) ', vEncodingTo)
qui peut ?tre ?crite
> Dim vStream As New StreamWriter(fp, vEncodingTo)
et donc contenir un param?tre de type System.Text.Encoding, donc ar
exemple UTF7, UTF8, ASCII ou Unicode.

Aucun de ces encodages permet la rel?cture correcte sous cmd.

J'ai aussi essay? de convertir l'encodage du contenu (vContent) avant de
l'?crire - sans succ?s... ;(

Est-ce que qqun connais le probl?me et peut m'aider ?

Merci d'avance

Dominique

PS: Non, je ne peux ?viter les accents, certains fichiers du client
contenants des accents dans leurs noms.
D.Hinnen
Le #12443111
Merci pour ta réaction rapide!

Oui, tu as bien compris le problème.

Alors, pContent peut contenir tout texte, mais à priori c'est du code
généré du genre:
---
@echo off
echo Copie en cours...
copy "Ceci est un nom de fichier avec éàè.truc" "\ServeurCData"
copy "Ceci est un autre nom de fichier avec öäü.truc" "\ServeurCData"
---
Les retours de ligne sont des classqiques chr(13),chr(10)

Le contenu de pContent est affiché correctement depuis la fenêtre
"Commande - Immédiat", donc avec les accents.
Le fichier généré est affiché correctement depuis des outils Windows.
Par contre, le contenu est faux avec un "type fichier.bat" sous cmd ou
lors de l'éxécution de celui-ci sous cmd.

Autre indice:
En générant un fichier contenant le string "éàèöäü" depuis Windows et
depuis cmd (avec "copy con test") et on comparant les codes de deux
fichiers on reçoit le tableau suivant:
win cmd
é 233 130
à 224 133
è 232 138
ö 256 148
ä 228 132
ü 252 129

Salutations

Dominique



Winsysbee wrote:
peux tu nous donner la valeur de ta variable vContent ainsi que l'os d'execution du code et l'os d'execution du bat.
Ton code est bon, je pense que c'est plutot ce que tu mets dans le fichier qui doit ?tre mauvais.
Si j'ai bien compris, le fichier bat que tu ecris, tu dois le faire tourner en ligne de commande, et cela ne fonctionne pas ?

WinSysBee Support Team
http://www.winsysbee.com


nntp://news.free.fr/microsoft.public.fr.dotnet.vb/ >

Bonjour tout-le-monde !

Je cherche ? ?crire depuis vb.net dans un fichier batch.
Le probl?me que je rencontre est l'encodage, cad des accents lus
correctement depuis Windows (??? mais aussi ???) ne sont pas interpr?t?s
correctement sous cmd.

Le code pour ce faire est simple:
Dim fp As New System.IO.FileStream(pFileName,
FileMode.OpenOrCreate, FileAccess.Write)
Dim vStream As New StreamWriter(fp) ', vEncodingTo)
With vStream
.BaseStream.Seek(0, SeekOrigin.End)
.Write(vContent)
.Flush()
.Close()
End With

Une particularit? est dans la ligne:
> Dim vStream As New StreamWriter(fp) ', vEncodingTo)
qui peut ?tre ?crite
> Dim vStream As New StreamWriter(fp, vEncodingTo)
et donc contenir un param?tre de type System.Text.Encoding, donc ar
exemple UTF7, UTF8, ASCII ou Unicode.

Aucun de ces encodages permet la rel?cture correcte sous cmd.

J'ai aussi essay? de convertir l'encodage du contenu (vContent) avant de
l'?crire - sans succ?s... ;(

Est-ce que qqun connais le probl?me et peut m'aider ?

Merci d'avance

Dominique

PS: Non, je ne peux ?viter les accents, certains fichiers du client
contenants des accents dans leurs noms.





Fred
Le #12443101
Dans le message:%,
D.Hinnen écrit :
Merci pour ta réaction rapide!

Oui, tu as bien compris le problème.

Alors, pContent peut contenir tout texte, mais à priori c'est du code
généré du genre:
---
@echo off
echo Copie en cours...
copy "Ceci est un nom de fichier avec éàè.truc" "\ServeurCData"
copy "Ceci est un autre nom de fichier avec öäü.truc"
"\ServeurCData" ---
Les retours de ligne sont des classqiques chr(13),chr(10)

Le contenu de pContent est affiché correctement depuis la fenêtre
"Commande - Immédiat", donc avec les accents.
Le fichier généré est affiché correctement depuis des outils Windows.
Par contre, le contenu est faux avec un "type fichier.bat" sous cmd ou
lors de l'éxécution de celui-ci sous cmd.

Autre indice:
En générant un fichier contenant le string "éàèöäü" depuis Windows et
depuis cmd (avec "copy con test") et on comparant les codes de deux
fichiers on reçoit le tableau suivant:
win cmd
é 233 130
à 224 133
è 232 138
ö 256 148
ä 228 132
ü 252 129



Essaie ce petit bout de code (en application console) qui peut
éventuellement donner une piste de recherche.

Sub Main()
Dim s As String = "éàè"
Dim b() As Byte =
System.Text.UnicodeEncoding.GetEncoding(850).GetBytes(s)
Dim index As Integer
For index = b.GetLowerBound(0) To b.GetUpperBound(0)
Console.WriteLine(s & " : " & b(index).ToString)
Next
Console.ReadLine()
End Sub



--
Fred
D.Hinnen
Le #12443091
Merci l'équipe WinSysBee et merci Fred !

J'ai reçu sur un autre groupe la réponse (testé):

L'encoding à utiliser lors de l'écriture est:
> Text.Encoding.GetEncoding(437)
donc par exemple
> Dim sw As New StreamWriter(vFichier, False, Encoding.GetEncoding(437))

Il n'y a pas besoin de convertir le contenu à écrire avant l'écriture.

Encore merci

Dominique Hinnen


Winsysbee wrote:
peux tu nous donner la valeur de ta variable vContent ainsi que l'os d'execution du code et l'os d'execution du bat.
Ton code est bon, je pense que c'est plutot ce que tu mets dans le fichier qui doit ?tre mauvais.
Si j'ai bien compris, le fichier bat que tu ecris, tu dois le faire tourner en ligne de commande, et cela ne fonctionne pas ?

WinSysBee Support Team
http://www.winsysbee.com


nntp://news.free.fr/microsoft.public.fr.dotnet.vb/ >

Bonjour tout-le-monde !

Je cherche ? ?crire depuis vb.net dans un fichier batch.
Le probl?me que je rencontre est l'encodage, cad des accents lus
correctement depuis Windows (??? mais aussi ???) ne sont pas interpr?t?s
correctement sous cmd.

Le code pour ce faire est simple:
Dim fp As New System.IO.FileStream(pFileName,
FileMode.OpenOrCreate, FileAccess.Write)
Dim vStream As New StreamWriter(fp) ', vEncodingTo)
With vStream
.BaseStream.Seek(0, SeekOrigin.End)
.Write(vContent)
.Flush()
.Close()
End With

Une particularit? est dans la ligne:
> Dim vStream As New StreamWriter(fp) ', vEncodingTo)
qui peut ?tre ?crite
> Dim vStream As New StreamWriter(fp, vEncodingTo)
et donc contenir un param?tre de type System.Text.Encoding, donc ar
exemple UTF7, UTF8, ASCII ou Unicode.

Aucun de ces encodages permet la rel?cture correcte sous cmd.

J'ai aussi essay? de convertir l'encodage du contenu (vContent) avant de
l'?crire - sans succ?s... ;(

Est-ce que qqun connais le probl?me et peut m'aider ?

Merci d'avance

Dominique

PS: Non, je ne peux ?viter les accents, certains fichiers du client
contenants des accents dans leurs noms.





Publicité
Poster une réponse
Anonyme