Problème avec accents et caractères spéciaux

gar6more Messages postés 19 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 28 août 2014 - 18 nov. 2011 à 15:49
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 21 nov. 2011 à 11:38
Bonjour,

J'ai réalisé une application qui lit les données contenues dans des fichiers CSV d'un dossier, et qui les envoie par le port com à un autre pc qui lui tourne sous DOS.
J'ai juste un problème avec les caractères accentués. Le pc sous DOS n'utilise pas les même tables, et les caractères accentués sont transcrit sous la forme d'un carré. J'ai essayé de transformer mes chaines de caractères avec divers fonctions avant de les envoyer, mais j'ai toujours ce problème.
Est ce que vous avez une idée ?

Merci

Gar6more

5 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
18 nov. 2011 à 16:10
Bonjour,
Essaie ceci:

Imports System.IO
Imports System.Text
 Dim monStreamReader As StreamReader = New System.IO.StreamReader(fichier, Encoding.Default) 'Stream pour la lecture avec caractères accentués du fichier



@+ Le Pivert
2
NHenry Messages postés 15118 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 11 mai 2024 159
18 nov. 2011 à 18:57
Bonjour,

Si ta machine est sous DOS, je pense que la page de code à utiliser est la 850.
Regardes les insormations concernant l'encodage des caractères (LePivert t'as déjà donné la classe : Encoding).

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
gar6more Messages postés 19 Date d'inscription mardi 21 janvier 2003 Statut Membre Dernière intervention 28 août 2014
21 nov. 2011 à 11:04
Tout d'abord merci pour votre aide.

J'ai déjà essayer cela. Voila une fonction qui convertit en IBM850 avant d'envoyer via le port COM. Mais là encore, j'obtient pas les caractères accentués.


Function ConvertStringToDOS(ByVal strWindow As String, ByVal id As Integer) As String

Dim unicodeString As String = strWindow

' Create two different encodings.
Dim [unicode] As Encoding = Encoding.Unicode
Dim IBM850 As Encoding = Encoding.GetEncoding(720)


' Convert the string into a byte[].
Dim unicodeBytes As Byte() = [unicode].GetBytes(unicodeString)


' Perform the conversion from one encoding to the other.
Dim IBM850Bytes As Byte() = Encoding.Convert([unicode], IBM850, unicodeBytes)


' Convert the new byte[] into a char[] and then into a string.
' This is a slightly different approach to converting to illustrate
' the use of GetCharCount/GetChars.

Dim IBM850Chars(IBM850.GetCharCount(IBM850Bytes, 0, IBM850Bytes.Length) - 1) As Char
IBM850.GetChars(IBM850Bytes, 0, IBM850Bytes.Length, IBM850Chars, 0)
Dim IBM850String As New String(IBM850Chars)

' Display the strings created before and after the conversion.
ConvertStringToDOS = IBM850String

End Function


Gar6more
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 nov. 2011 à 11:34
Bonjour,

Je me rappelle m'être assez durement "frotté" à un problème de ce genre il y a plusieurs années.
J'avais finalement adopté la solution suivante :
1) relever le codepage du dos utilisé (il faut le connaître en vue de le restituer ensuite)
2) selectionner (sous DOS) le codepage adéquat pour l'affichage sur la machine windows utilisatrice, à l'aide de
mode CON CP SELECT=......(la valeur utile)
3) rediriger la sortie du dos vers un fichier texte (par un pipe genre > C:\coco.txt )
4) rétablir la valeur originale du codepage du DOS (celle en 1) )
5) lire le fichier texte C:\coco.txt

Attention : les codepages ne sont pas les mêmes partout (diffèrent selon les pays)
C'est tout ce que j'avais trouvé
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 nov. 2011 à 11:38
Ah ...
Mais toi, c'est l'inverse, que tu fais !
Le principe est le même, mais il te faut alors connaîtrre le codepage de l'utilisateur final !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous