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

Résolu
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 20 déc. 2006 à 11:10
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 - 20 déc. 2006 à 14:07
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

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 déc. 2006 à 12:43
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>
3
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 déc. 2006 à 14:07
J'ai la solution !

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

Merci pour ta participation et ta rapidité NHenry
3
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 déc. 2006 à 13:00
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 ?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 déc. 2006 à 13:11
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>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 déc. 2006 à 13:13
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.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 déc. 2006 à 13:19
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>
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 déc. 2006 à 13:24
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.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 déc. 2006 à 13:24
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>
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 déc. 2006 à 13:28
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>
0
cs_nitrique Messages postés 344 Date d'inscription jeudi 1 mai 2003 Statut Membre Dernière intervention 4 avril 2011 1
20 déc. 2006 à 13:57
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...
0
Rejoignez-nous