IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Représentation littérale de caractères unicode dans fichier texte


Sujet :

C#

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 26
    Points
    26
    Par défaut Représentation littérale de caractères unicode dans fichier texte
    Bonjour,

    Je dois charger des fichiers textes qui contiennent des caractères unicode littéraux avec par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c'est quand m\u00eame incroyable tout \u00e7a
    je souhaite pouvoir convertir ces représentations unicode en caractères "normaux" afin de les sauvegarder de nouveau dans un autre fichier qui serait alors de la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c'est quand même incroyable tout ça
    Actuellement j'y arrive à partir d'une chaine de caractères en entrée mais pas du tout à partir d'un fichier. Je ne maitrise pas trop ce type de problématique.

    Merci d'avance pour toute réponse

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Points : 279
    Points
    279
    Par défaut
    Si tu utilise ReadLine() ou autre sur ton fichier, tu récupère un string et donc tu peux le convertir comme tel.
    http://msdn.microsoft.com/en-us/libr...00(vs.71).aspx

    Comment est-ce que tu charges tes fichiers texte?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StreamReader streamReader = new StreamReader(FilePath);
    string Content = streamReader.ReadToEnd();
    streamReader.Close();
    Et j'ai aussi des \\u00... avec les \u00...

    Citation Envoyé par demonia Voir le message
    Si tu utilise ReadLine() ou autre sur ton fichier, tu récupère un string et donc tu peux le convertir comme tel.
    http://msdn.microsoft.com/en-us/libr...00(vs.71).aspx
    Cela ne change rien.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    197
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2006
    Messages : 197
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par chipster45 Voir le message
    Cela ne change rien.
    Oui, c'est normal, si tu ne le converti pas.

    Sur le lien que je t'ai donné tu as une méthode simple pour convertir de l'unicode en ASCII

    Tu créé une méthode du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    		private String UnicodeToAscii(String unicodeString) {
    			Encoding ascii = Encoding.ASCII;
    			Encoding unicode = Encoding.Unicode;
     
    			// Convert the string into a byte[].
    			byte[] unicodeBytes = unicode.GetBytes(unicodeString);
     
    			// Perform the conversion from one encoding to the other.
    			byte[] asciiBytes = Encoding.Convert(unicode, ascii, 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.
    			char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
    			ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
    			return new String(asciiChars);
    		}
    et tu l'utilise sur ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    StreamReader streamReader = new StreamReader(FilePath);
    string Content = UnicodeToAscii(streamReader.ReadToEnd());
    streamReader.Close();

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Tu ne pourras pas faire de conversion ainsi puisque les caractères unicode sont indiqués sous leur forme littérale dans le fichier, ils ne peuvent donc pas être interprétés.

    En effet dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c'est quand m\u00eame incroyable tout \u00e7a
    le bloc \u00ae ne représente pas un caractère unicode mais bien 6 caractères (\, u, 0, 0, e, a). Ce n'est pas lié à l'encodage du fichier, on ne peut donc rien faire en jouant la dessus.

    La seule solution c'est de remplacer dans le texte, car je ne crois pas qu'il existe une classe pour faire ça (un peu à la manière de la classe HttpServerUtility avec les méthodes HtmlEncode et HtmlDecode).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String text = System.IO.File.ReadAllText(monfichier);
    text = text
        .Replace("\\u00ea", "ê")
        .Replace("\\u00e7", "ç");

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 26
    Points
    26
    Par défaut
    Bon étant donné que le but était d'afficher le contenu dans un webbrowser, j'ai fini par convertir ces chaînes de caractères en leur équivalent html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    content = Regex.Replace(content , @"\\{1,2}u([0-9a-fA-F]{4})", @"&#x0$+;");
    Cela ne corresponds pas forcément au résultat que je souhaitais mais ca marche dans le contexte de mon problème .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Importer des caractères d'un fichier texte dans un tableau
    Par Crepit dans le forum C#
    Réponses: 7
    Dernier message: 05/02/2014, 11h18
  2. [PowerShell] Remplacer caractère dans fichier texte
    Par jck2003 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 23/03/2012, 06h27
  3. Réponses: 3
    Dernier message: 25/08/2011, 10h26
  4. Exports de chaînes de caractère dans fichier texte
    Par Stormy31 dans le forum Langage
    Réponses: 4
    Dernier message: 29/01/2009, 13h31
  5. Comment trouver une chaine de caractère dans fichier texte
    Par youssef1989 dans le forum Débuter
    Réponses: 3
    Dernier message: 01/05/2008, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo