[VB2005] Serialport->Transformation de caractères accentués [Résolu]

Signaler
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
-
Bonjour à tous,


Voici ma config:
J'ai relié le port COM1 au port COM2 par un cable série croisé, ce qui me permet de visualiser ce que j'envoie sur le port COM1 gràce à un logiciel de récupération de donnée (docklight).


Sur le port COM1, je bascule entre plusieurs méthodes pour écrire cette la phrase "Bonjour à toi Jéjé.":
1 - J'ai installé une imprimante générique texte, et je fait imprimer depuis le bloc notes -> CA MARCHE !
2 - Je passe par l'hyperterminal -> CA MARCHE (mais dans la zone texte de l'hyperterminal, il me remplace les à par Ô et les é par ù majuscule... Pas grave).
3 - Je passe par mon application -> CA NE MARCHE PAS (il me renvoie toujours "Bonjour ? toi J?j?.").


Pourtant, je fait simplement:
...SerialPort1.WriteLine(textbox1.text)
et aussi, pour tester:
...SerialPort1.WriteLine("Bonjour à toi Jéjé.")
et carrément:
...SerialPort1.WriteLine("Bonjour à toi J" & convert.toChar(233) &"jé.")


Mais rien à faire, il me remplace toujours les caractères propres à la table Française par le code ASCII 063.
(j'ai essayé de brancher une imprimante sur le COM1, et le résultat est le même)


Qu'est ce qu'il se passe ?

10 réponses

Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Bonjour

Dim lStr as string="Bonjour à toi Jéjé."


WriteLine((new system.text.utf8).getbytes(lstr))


ça devrait marcher.

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
J'ai la solution !

SerialPort1.Encoding = System.Text.Encoding.GetEncoding(1252)
1250 étant l'europe centrale.

Merci pour ta participation et ta rapidité NHenry
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
http://www.vbfrance.com/code.aspx?ID=37581#System.Text.UTF8 n'existe pas (ou alors, il me manque un imports), jai prit System.Text.UTF8Encoding

Or:
SerialPort1.WriteLine((New System.Text.UTF8Encoding).GetBytes(txtRendu.Text))
me fait une erreur: Value of type '1-dimensional array of Byte' cannot be converted to 'String'.
Pas toi ?
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Bonjour

Bonne remarque :


ce n'est pas writeline qu'il faut utiliser mais Write (à toi de faire les retours chariots).

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
Bon, j'ai réussi à envoyer ma chaine en UTF8:
SerialPort1.Write((

New System.Text.UTF8Encoding).GetBytes(txtRendu.Text & vbCrLf), 0, txtRendu.Text.Length)
Seulement, le résultat est le même que quand je faisait:
SerialPort1.Encoding = System.Text.Encoding.UTF8
Juste avant le writeline

Ca me rend: "Bonjour Â[espace] toi jÂ[copyright]jÂ[copyright]"
Code ASCII: 195 et 169 au lieu de 233.
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Bonjour

Comme je l'ai dit, il prend les caracères accentués en unicode.


Si tu fait le client et les serveur (les 2 bouts de ta liaison), tu peux utiliser UnicodeEncoding aulieu de UTF8Encoding.


Sinon, système D.

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
Non justement, je fait client serveur pour les tests, sinon, c'est une imprimante.
En Unicode, le é est bien reproduit, seulement, il met un NULL entre chaque caractère.
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Bonjour

Pour l'unicode :


Dim lTab as byte()=(new system.text.unicodeEncoding).getbytes($$$Texte$$$)


Write(lTab,0,lTab.length)

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
Messages postés
14799
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
6 juin 2021
155
Bonjour

C'est normal, il code les cars en 16 bits au lieu de 8.


Pour ton pb, soit tu parvient à trouver les correspondances (entre
caractères accentués de l'ordi et ceux de l'imprimante), et tu utilise
replace, sinon, tu vire touts les accents.

Il est plus facile de batiser quelqu'un que de la convertir. (surtout en programmation)
NHenry (VB6, VBA excel, VB.NET, C++, C#.Net)

<fon></fon>
Messages postés
344
Date d'inscription
jeudi 1 mai 2003
Statut
Membre
Dernière intervention
4 avril 2011
1
Je ne peux pas virer tous les accents.
Je n'ai pas compris ton getBites avec les $$$, il ne compile pas.

J'ai ça sinon:
...SerialPort1.Encoding = System.Text.Encoding.GetEncoding(1250)
Qui me transmet bien le é, mais sinon, il enlève les accents sur é, ê et à.
Pas logique...