FileInfo en ASCII [Résolu]

Signaler
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013
-
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013
-
Bonjour,

Je suis en train d'écrire un programme, et je récupère les noms des fichiers d'un répertoire via FileInfo.name
Mais voilà, la chaine obtenue est en Unicode, et certains caractères des noms de fichier appartiennent normalement au code ASCII étendu (caractère au dessus de 128)...
Or j'ai besoin de connaitre la valeur de chaque octet, et en utilisant string[...], j'obtiens des valeurs de 8230, 8212...

Comment récupérer les noms des fichiers en ASCII et non en Unicode?

Merciiii

14 réponses

Messages postés
14692
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2020
144
Bonjour,

D'accord, Donc, je corriges ma ligne :
System.Text.Encoding.GetEncoding(NumEncode).GetBytes

Ensuite, essayes quelques pages de codes (NumEncode) pour voir le résultat.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]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
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Après quelques recherches, les caractères incriminés appartiennent au Alt Codes: … pour [alt] 0133 et — pour [alt] 0151... mais mis dans un fichier vierge, chacun de ses caractères ne pèse qu'un octet, alors ils ont forcément une valeur ASCII comprise entre 0 et 255, non?
Messages postés
14692
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2020
144
Bonjour,

Si tu veux convertir du texte en tableau d'octet, regardes System.Text.Encoding.ToByteArray (ou similaire).

Je n'ai pas MSDN de chargé, désolé.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]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
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

c'est tenté, mais tous les caractères au dessus de 127 renvoient l'octet 63 donc "?"...
Messages postés
14692
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2020
144
Bonjour,

Car tu as choisi l'encodage ASCII.
Essayes plutôt UTF-8 ou alors, il te faudra utiliser une page de code (voir la liste des numéros des pages de codes, https://fr.wikipedia.org/wiki/Page_de_code )

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]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
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Toujours pas, FileInfo renvoi le nom du fichier en Unicode... ya une autre façon de récupérer le nom des fichiers?
Messages postés
14692
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2020
144
Bonjour,

Comelmnt tu fais actuellement, un peu de code ne serais pas de trop maintenant.
(Regardes le point 2 de ma signature)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]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
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

FileInfo[] Fichiers = DossiersInfo.GetFiles();

 foreach (FileInfo NomFichier in Fichiers)
{
                    DataFichier.Rows[LigneEnCours].Cells[0].Value = NomFichier.Name;
}


NomFichier.Name me donne: ¥ÂäÒÆÖÊ…—ÓæÎ

J'ai tenté des conversions avec:

                    byte[] TmpBytes = Encoding.ASCII.GetBytes(NomFichier.Name);


et

                    byte[] TmpBytes = Encoding.UTF8.GetBytes(NomFichier.Name);


mais rien n'y fait...

la chaine de caractère donnée par char[] est
165, 194, 228, 210, 198, 214, 202, 8230, 157, 8212, 143, 211, 230, 206
alors qu'en ouvrant cette même chaine dans un éditeur hexadécimal après l'avoir mis dans un fichier vierge (longueur 14 octets), je trouve:
165, 194, 228, 210, 198, 214, 202, 133, 157, 151, 143, 211, 230, 206

Donc pour une raison que j'ignore, les caractères … (133) et — (151) ne sont pas correctement reconnu...

Une idée?...
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

marrant, la page csharpfr as les même problème de codage
Messages postés
14692
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2020
144
Bonjour,

Le fait de copier le texte dans un éditeur de texte l'as fait changer de page.
Essayes d'utiliser la page 1252 :
(new System.Text.Encoding(1252)).GetBytes(NomFichier.Name)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]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
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

J'ai rien compris...

Tout ce que je sais, c'est qu'éditer le nom de mon fichier dans l'explorateur, le copier par ctrl+C et le coller dans un fichier txt par ctrl+V me donne un fichier du nombre exact d'octets qu'il y a de symboles dans le nom du fichier, et que chacun des symboles correspond à une valeur comprise entre 0 et 255!

pas réussi à mettre en oeuvre la solution proposé
Messages postés
14692
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 août 2020
144
Bonjour,

Tu veux en faire quoi de ce nom de fichier ?
Normalement, le Framework travaille en Unicode en mémoire.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]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
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Je désire utiliser la valeur des octets pour les additionner et les soustraire (système de cryptage)
Messages postés
56
Date d'inscription
vendredi 31 janvier 2003
Statut
Membre
Dernière intervention
26 mai 2013

Merci beaucoup, j'ai utiliser la page zéro, et ça marche!