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 :

Problème de conversion utf-8 en ISO


Sujet :

C#

  1. #1
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut Problème de conversion utf-8 en ISO
    salut,

    je travaille sur la conversion d'un programme VB en c#, celui-ci insérait des valeurs d'une base SQL server (en interclassement utf-8) vers une base MySQL (en interclassement "latin1_swedish_ci") via une Requète HTTP.

    Avant d'exécuter la requète HTTP, il appliquait le code suivant :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Public Function URLEncode(ByVal sRawURL As String) As String
     
        Dim iLoop As Integer
        Dim sRtn As String
        Dim sTmp As String
     
        Const sValidChars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:/.?=_-$(){}~"
     
        sRtn = ""
        For iLoop = 1 To Len(sRawURL)
            sTmp = Mid(sRawURL, iLoop, 1)
     
            If InStr(1, sValidChars, sTmp, vbBinaryCompare) = 0 Then
                sTmp = Hex(Asc(sTmp))
               If Len(sTmp) = 1 Then
                    sTmp = "0" & sTmp
                End If
                sTmp = "%" & sTmp
            End If
     
            sRtn = sRtn & sTmp
        Next iLoop
     
        URLEncode = sRtn
     
    End Function
    Dans ce code, je suis incapable d'écrire en c la ligne suivante : Quelqu'un aurait t-il la solution ou existe t'il un moyen plus simple d'effectuer cette conversion en c#?

    merci

  2. #2
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    HttpUtility.UrlEncode(), ce sera plus fiable et plus élégant que cette fonction immonde.

  3. #3
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    je ne trouve pas cette classe, pourtant j'ai été sur cette page :
    msdn

    mais impossible de trouver HttpService même en mettant using System.Web;

    pour info, je travaille sous le framework 3.5

    Et pourquoi cette fonction VB est immonde? elle a rendu 2 ans de bons et loyaux services... ^^

  4. #4
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    Tu dois manuellement ajouter une référence vers System.Web dans ton projet.

  5. #5
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Hum ça marche, mais maintenant c'est le reste de ma fonction qui ne fonctionne plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private static HttpWebResponse GetResponse(string chSql)
            {
                HttpWebRequest requete = (HttpWebRequest)WebRequest.Create(HttpUtility.UrlEncode(chSql));
                HttpWebResponse response = (HttpWebResponse)requete.GetResponse();
    return response;
    }
    pour info : chsql = "http://xxxx.fr/?module=categories&action=add&name=Matériel optique&publish=True&parent=0"

    J'ai le message "URI non valide : Impossible de déterminer le format de l'URI." au moment de la création de la WebRequest.

  6. #6
    Membre éprouvé
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Par défaut
    C'est ça que tu veux faire en fait :

    string str = "http://xxxx.fr/?module=categories&action=add&name=" + HttpUtility.UrlEncode("Matériel optique") + "&publish=True&parent=0";

    non?

  7. #7
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    oui sauf que je voulais éviter d'appeler la méthode urlencode pour chaque paramètre (j'ai un bon paquet de requètes déja codées), donc j'ai appliqué l'url en code a l'URL en entier.
    De toute façon, j'ai l'impression que l'UrlEncode ne code pas en "iso-8859-1"

    J'essaye plutot de changer la propriété TransferEncoding de HttpWebRequest mais je me retrouve avec un nouveau message d'erreur
    "TransferEncoding requiert que la propriété SendChunked ait la valeur true." au moment de recevoir la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    HttpWebRequest requete = (HttpWebRequest)WebRequest.Create(chSql);
                requete.SendChunked = true;
                requete.TransferEncoding = "iso-8859-1";
    HttpWebResponse response = (HttpWebResponse)requete.GetResponse();

  8. #8
    Membre confirmé Avatar de thelpi
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 217
    Par défaut
    Bon tant pis, je pose ma solution (temporaire) si ça peut intéresser quelqu'un ou si quelqu'un à une proposition pour l'améliorer

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    private static string Encode(string ch)
            {
                const string sValidChars = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz:/.?=_-$(){}~";
                bool valid;
                string chResult = "";
                char cValid;
                int i;
                foreach (char c in ch)
                {
                    valid = false;
                    i = 0;
                    do
                    {
                        cValid = sValidChars[i];
                        if (c == cValid)
                        {
                            valid = true;
                        }
                        i = i + 1;
                    }
                    while (!valid && i < sValidChars.Length);
     
                    if (valid) chResult = chResult + c.ToString(); 
                    else chResult = chResult + Uri.HexEscape(c);
                }
                return chResult;
            }

Discussions similaires

  1. Problème de conversion UTF 8 avec toUtf8()
    Par defrouille dans le forum Qt
    Réponses: 14
    Dernier message: 03/02/2011, 15h06
  2. Conversion UTF => ISO et caractères "exotiques"
    Par tomlev dans le forum Langage
    Réponses: 7
    Dernier message: 24/03/2009, 09h39
  3. problème de conversion UTF -> iso
    Par Empty_body dans le forum Général Java
    Réponses: 15
    Dernier message: 01/08/2008, 16h57
  4. Encodage : Conversion UTF-8 vers ISO-8859-?
    Par polo54 dans le forum Général Java
    Réponses: 6
    Dernier message: 26/06/2007, 19h10
  5. Conversion UTF => ISO
    Par komoku dans le forum Langage
    Réponses: 2
    Dernier message: 31/01/2007, 12h14

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