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

cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 20 déc. 2006 à 11:10 - Dernière réponse : cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 20 déc. 2006 à 12:43
3
Merci
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>

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 20 déc. 2006 à 14:07
3
Merci
J'ai la solution !

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

Merci pour ta participation et ta rapidité NHenry

Merci cs_nitrique 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de cs_nitrique
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 20 déc. 2006 à 13:00
0
Merci
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 ?
Commenter la réponse de cs_nitrique
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 20 déc. 2006 à 13:11
0
Merci
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>
Commenter la réponse de NHenry
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 20 déc. 2006 à 13:13
0
Merci
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.
Commenter la réponse de cs_nitrique
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 20 déc. 2006 à 13:19
0
Merci
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>
Commenter la réponse de NHenry
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 20 déc. 2006 à 13:24
0
Merci
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.
Commenter la réponse de cs_nitrique
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 20 déc. 2006 à 13:24
0
Merci
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>
Commenter la réponse de NHenry
NHenry 14250 Messages postés vendredi 14 mars 2003Date d'inscription 10 août 2018 Dernière intervention - 20 déc. 2006 à 13:28
0
Merci
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>
Commenter la réponse de NHenry
cs_nitrique 346 Messages postés jeudi 1 mai 2003Date d'inscription 4 avril 2011 Dernière intervention - 20 déc. 2006 à 13:57
0
Merci
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...
Commenter la réponse de cs_nitrique

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.