Convertir fichier texte UNICODE en ASCII ??

Le
teddy
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC PRODUCT
GET /FORMAT:csv > Temp.csv) et dont les caractères semblent codés sur 2
octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye de
convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted
  • Partager ce contenu :
Vos réponses
Trier par : date / pertinence
LE TROLL
Le #15424311
Bonjour,

D'après ce que tu dis, tu as un codage ascii déjà sur 2 octets par signe
espace, c'est le lot de tous le fichiers textes, et ce qui en découle
généralement, que voudrais-tu comme codage, sur combien d'octets, pourquoi
???

--

Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy"
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC PRODUCT
GET /FORMAT:csv > Temp.csv) et dont les caractères semblent codés sur 2
octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye de
convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted



Jacques93
Le #15424241
Bonjour teddy,
teddy a écrit :
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC PRODUCT
GET /FORMAT:csv > Temp.csv) et dont les caractères semblent codés sur 2
octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye de
convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted




Quelle méthode utilise tu pour lire le fichier ?
Avec :

Line Input #fNum, source

le fichier semble correctement interprété par VB. Il faut simplement
ignorer les 2 premiers octets : FF FE qui indiquent un codage UTF-16
en little-endian.

Plus de détails ici sur les Byte Order Mark :

http://fr.wikipedia.org/wiki/Marque_d'ordre_des_octets

--
Cordialement,

Jacques.
teddy
Le #15424141
L'ASCII "de base", c'est un octet par caractère.


"LE TROLL"
Bonjour,

D'après ce que tu dis, tu as un codage ascii déjà sur 2 octets par signe
espace, c'est le lot de tous le fichiers textes, et ce qui en découle
généralement, que voudrais-tu comme codage, sur combien d'octets, pourquoi
???

--

Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy"
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC
PRODUCT GET /FORMAT:csv > Temp.csv) et dont les caractères semblent codés
sur 2 octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye
de convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted







teddy
Le #15424131
ok, merci.

"Jacques93" a écrit dans le message de news:
OR81LcA%
Bonjour teddy,
teddy a écrit :
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC
PRODUCT GET /FORMAT:csv > Temp.csv) et dont les caractères semblent codés
sur 2 octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye
de convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted



Quelle méthode utilise tu pour lire le fichier ?
Avec :

Line Input #fNum, source

le fichier semble correctement interprété par VB. Il faut simplement
ignorer les 2 premiers octets : FF FE qui indiquent un codage UTF-16
en little-endian.

Plus de détails ici sur les Byte Order Mark :

http://fr.wikipedia.org/wiki/Marque_d'ordre_des_octets

--
Cordialement,

Jacques.


LE TROLL
Le #15345301
Oui, pardon, je voulais dire 2 bits... suis, distrait :o)

--
Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy" %23kM$oBI%
L'ASCII "de base", c'est un octet par caractère.


"LE TROLL"
Bonjour,

D'après ce que tu dis, tu as un codage ascii déjà sur 2 octets par signe
espace, c'est le lot de tous le fichiers textes, et ce qui en découle
généralement, que voudrais-tu comme codage, sur combien d'octets,
pourquoi ???

--

Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy"
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC
PRODUCT GET /FORMAT:csv > Temp.csv) et dont les caractères semblent
codés sur 2 octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye
de convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted











LE TROLL
Le #15345281
Peux-tu envoyer ou mettre en ligne ici ton fichier, pour voir à quoi sa
structure ressemble ???

--
Merci beaucoup, au revoir et à bientôt :o)
------
Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy" %23kM$oBI%
L'ASCII "de base", c'est un octet par caractère.


"LE TROLL"
Bonjour,

D'après ce que tu dis, tu as un codage ascii déjà sur 2 octets par signe
espace, c'est le lot de tous le fichiers textes, et ce qui en découle
généralement, que voudrais-tu comme codage, sur combien d'octets,
pourquoi ???

--

Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy"
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC
PRODUCT GET /FORMAT:csv > Temp.csv) et dont les caractères semblent
codés sur 2 octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye
de convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted











teddy
Le #15345231
On peux obtenir le début du fichier en lançant dans la console la commande
que j'ai indiquée dans mon 1er post :
WMIC PRODUCT GET /FORMAT:csv > Temp.csv

Dans le fichier obtenu, les caractères sont bien de l'ASCII mais codés
apparemment sur 2 octets dont l'un est 00 si bien que chaque caractère est
séparé du suivant par un espace à l'affichage.

Si quelqu'un voit comment traiter le fichier ou paramétrer la commande
console, je suis preneur ...

Ted
jm
Le #15345201
" teddy" news:OZYYegU%
On peux obtenir le début du fichier en lançant dans la console la commande
que j'ai indiquée dans mon 1er post :
WMIC PRODUCT GET /FORMAT:csv > Temp.csv

Dans le fichier obtenu, les caractères sont bien de l'ASCII mais codés
apparemment sur 2 octets dont l'un est 00 si bien que chaque caractère est
séparé du suivant par un espace à l'affichage.

Si quelqu'un voit comment traiter le fichier ou paramétrer la commande
console, je suis preneur ...



Hello,

c'est en fait très simple. Ton fichier est simplement codé en Unicode, c'est
à dire qu'il a la structure suivante:
Les 2 premiers octets (ici FF FE) sont la marque de l'unicode et t'indique
si le fichier est codé en big-endian ou en litle endian.
Ici, "FF FE" indique un codegae little-endian, ce qui signifie que dans la
suite du fichier, chaque caractère sera codé sur 2 octets, le premier octet
de chaque paire étant le code caractère et le second la page de code.
Tu verras que dans ton cas, le 2nd octet vaut toujours 0, ce qui est la
marque de la page de code correspondant à l'ASCII.

Comment traiter ce fichier?

Il ya une fonction VB qui permet de traiter ceci: StrConv()

Comment faire?

1. Lire le fichier entier en binaire
2. Convertir le buffer

Voici:

Dim f As Integer
Dim l As Long
Dim bufUnicode As String
Dim bufAscii As String
f = FreeFile
Open "c:temp.csv" For Binary As #f
l = LOF(f)
bufUnicode = Space$(l)
Get #f, , bufUnicode
Close #f
bufAscii = StrConv(bufUnicode, vbFromUnicode)

Et voila, pas plus compliqué que cela :-)

--
Jean-marc Noury (jean_marc_n2)
MVP Visual Basic
mailto: remove '_no_spam_' ;
FAQ VB: http://faq.vb.free.fr/
Loïc Carrère
Le #15344621
Oui, pardon, je voulais dire 2 bits... l-) l-) l-) l-) suis, distrait
:o)
mdr


--
Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy" %23kM$oBI%
L'ASCII "de base", c'est un octet par caractère.


"LE TROLL"
Bonjour,

D'après ce que tu dis, tu as un codage ascii déjà sur 2 octets par signe
espace, c'est le lot de tous le fichiers textes, et ce qui en découle
généralement, que voudrais-tu comme codage, sur combien d'octets, pourquoi
???

--

Site éditeur MES ROMANS édités
http://www.manuscritdepot.com/a.joseph-attila-pusztay.1.htm
Site de MES LOGICIELS
http://irolog.free.fr
mon adresse EMail
http://irolog.free.fr/ecrire/index.htm
------------------------------------------------------------------------------------
" teddy"
Bonjour à tous,

J'ai un fichier de redirection d'une commande console (CMD /C WMIC
PRODUCT GET /FORMAT:csv > Temp.csv) et dont les caractères semblent codés
sur 2 octets.
Je mets chaque ligne dudit fichier dans une chaîne "source" et j'essaye
de convertir en ASCII avec la fonction StrConv mais cela ne change rien.

destination = StrConv(source, 128)

Auriez-vous une idée sur les conversions UNICODE->ASCII ?
Une moulinette qui manipule des tableaux d'octets peut-être ?

Merci d'avance pour vos lumières, je ne sais pas comment faire :-|

Ted














--

Loïc Carrère

http://www.asi-concept.fr
Poster une réponse
Anonyme