OVH Cloud OVH Cloud

Vbs : problème caractères , accents

5 réponses
Avatar
user
Bonjour,

Je suis confronté à un problème et je n'arrive pas à le résoudre, je
vous pose la question si quelqu'un à une idée ?

Voila , je voudrais afficher un code erreur qui mets renvoyé par un
scripts .J'arrive bien a récupérer le code erreur, ensuite j'aimerais
que le code erreur soit traduit par le message correspondant grâce à
"net helpmsg "

Donc quand le script se termine correctement je récupère "0" comme code
de retour ensuite je le passe à "net helpmsg" par

Set oExec1 = objShell.Exec("net helpmsg "& id)
Do Until oExec1.StdOut.AtEndOfStream
sLine = LCase(oExec1.StdOut.ReadLine())

mess1=mess1+sLine
Loop


et je récupère le résultat avec StdOut, voila ou je bloque les accents
et caractère non us ne passe pas :(

ex : Au lieu de récupérer : "Opération réussie" , je réupère "Op,ration
r,ussie"

Il y a t-il une autre façon pour interpréter le code de retour en
évitant de passer par "net helpmsg" ?

Si il n'y a pas de solution comment faire pour corriger la mauvaise
interprétation des caractères non us ?

Je vous remercie par avance à tous...

5 réponses

Avatar
Gilles LAURENT
a écrit dans le message de
news:4555d16a$0$25922$
| Bonjour,

Bonjour,

[...]
| Set oExec1 = objShell.Exec("net helpmsg "& id)
| Do Until oExec1.StdOut.AtEndOfStream
| sLine = LCase(oExec1.StdOut.ReadLine())
|
| mess1=mess1+sLine
| Loop
|
| et je récupère le résultat avec StdOut, voila ou je bloque les
| accents et caractère non us ne passe pas :(

Set oExec1 = objShell.Exec ("%comspec% /c " & _
"chcp 1252>nul & net helpmsg "& id)

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Jean Philippe L
a écrit dans le message de
news:4555d16a$0$25922$
| Bonjour,

Bonjour,

[...]
| Set oExec1 = objShell.Exec("net helpmsg "& id)
| Do Until oExec1.StdOut.AtEndOfStream
| sLine = LCase(oExec1.StdOut.ReadLine())
|
| mess1=mess1+sLine
| Loop
|
| et je récupère le résultat avec StdOut, voila ou je bloque les
| accents et caractère non us ne passe pas :(

Set oExec1 = objShell.Exec ("%comspec% /c " & _
"chcp 1252>nul & net helpmsg "& id)



Merci ,

Sa fonctionne via wscript.echo, mais si je l'affiche avec un msgbox
toujours le même problème :(

Avatar
Gilles LAURENT
"Jean Philippe L" a écrit dans le message de
news:4555f110$0$5084$
| Sa fonctionne via wscript.echo, mais si je l'affiche avec un msgbox
| toujours le même problème :(

En effet, dans ce cas il est nécessaire de convertir les caractères OEM
de la console en ANSI. Une solution consiste à utiliser le script de
Jean-Claude BELLAMY oem2ansi.vbs disponible en téléchargement ici :
http://www.bellamyjc.org/fr/vbsdownload.html#oem2ansi

Ou alors utiliser ma fonction VBScript 'ToAnsi' permettant d'obtenir un
résultat identique. La table d'équivalence OEM=>ANSI a été obtenue avec
mon bout de code C suivant :

---8<---
#include <windows.h>

void main (void)
{
// déclaration des variables
int nCount, nCode ;

// balayage de la plage des caractères OEM [0..256]
for (nCount = 0 ; nCount < 256; nCount++) {

// traitement du code
nCode = nCount ;

// conversion OEM en ANSI
CharToOemBuff ((char *)&nCode, (char *)&nCode, 1) ;

// formatage de la sortie stdout "xyz"
printf ("%03d", nCode) ;

// retour à la ligne quand nécessaire (présentation NG)
if ((nCount + 1) % 11 == 0) printf ("n") ;
}
}
--->8---

+++ Usage (VBScript)
ToAnsi (strMessage)

--- Coupez ici ---

Function ToAnsi (strOem)

Dim nCount
Dim strOemToCharCode: strOemToCharCode = _
"0001020304050607080910" & _
"1112131416416171819182167" & _
"2223242526272829303132" & _
"3334353637383940414243" & _
"4445464748495051525354" & _
"5556575859606162636465" & _
"6667686970717273747576" & _
"7778798081828384858687" & _
"8889909192939495969798" & _
"99100101102103104105106107108109" & _
"110111112113114115116117118119120" & _
"121122123124125126127199252233226" & _
"228224229231234235232239238236196" & _
"197201230198244246242251249255214" & _
"220248163216215131225237243250241" & _
"209170186191174172189188161171187" & _
"166166166166166193194192169166166" & _
"434316216543434545434543" & _
"227195434345451664543164240" & _
"2082022032001052052062074343166" & _
"95166204175211223212210245213181" & _
"254222218219217253221175180173177" & _
"61190182167247184176168183185179" & _
"178166160"

For nCount = 1 To Len (strOem)
ToAnsi = ToAnsi & _
Chr (Int ( _
Mid ( _
strOemToCharCode, Asc ( _
Mid ( _
strOem, nCount, 1)) * 4 + 2, 3)))
Next

End Function

--- Coupez ici ---

--
Gilles LAURENT
http://glsft.free.fr
Avatar
Jean
Si il n'y a pas de solution comment faire pour corriger la mauvaise
interprétation des caractères non us ?


En utilisant l'objet "OlePrn.OleCvt" par exemple :

'---8<---Jean-JMST-Belgium---
Set objShell=CreateObject("WScript.Shell")
Set CONV=CreateObject("OlePrn.OleCvt")
id871
Set oExec1=objShell.Exec("cmd /c chcp")
mess1=oExec1.StdOut.ReadAll
page_code=Split(mess1,":")(1)
Set oExec1 = objShell.Exec("net helpmsg "& id)
mess1=CONV.ToUnicode(oExec1.StdOut.ReadAll,page_code)
MsgBox mess1
'---8<---Jean-JMST-Belgium---

Amicalement,

P.S : Ce sujet ayant déjà été évoqué ici n'hésitez pas a faire une
recherche dans les archives de news de Google.

--
Jean - JMST
Belgium

Avatar
Jean Philippe L
Si il n'y a pas de solution comment faire pour corriger la mauvaise
interprétation des caractères non us ?


En utilisant l'objet "OlePrn.OleCvt" par exemple :

'---8<---Jean-JMST-Belgium---
Set objShell=CreateObject("WScript.Shell")
Set CONV=CreateObject("OlePrn.OleCvt")
id871
Set oExec1=objShell.Exec("cmd /c chcp")
mess1=oExec1.StdOut.ReadAll
page_code=Split(mess1,":")(1)
Set oExec1 = objShell.Exec("net helpmsg "& id)
mess1=CONV.ToUnicode(oExec1.StdOut.ReadAll,page_code)
MsgBox mess1
'---8<---Jean-JMST-Belgium---

Amicalement,

P.S : Ce sujet ayant déjà été évoqué ici n'hésitez pas a faire une
recherche dans les archives de news de Google.



Ca fonctionne , merci :)