OVH Community, votre nouvel espace communautaire.

Problème caractères accentués -C#


Bruno Fedrigo
30/05/2016, 10h42
Bonjour,

Je vous expose le problème : dans une application console C#, je dois être capable d'envoyer des SMS automatiquement via celle-ci. Nous devons êtres capables de faire passer n'importe quel message sans nous soucier des caractères à utiliser.

Pour cela il me semble nécessaire de passer par paramètre "coding" en "8bit" ainsi qu'une conversion forcée du message en UTF-8 (bien que dans un post concernant le même problème en JAVA, la personne expliquait qu'il fallait encoder en "ISO-8859-1", solution testée aussi mais sans succès), malheureusement après plusieurs tests rien n'y fait, je continues de recevoir un message "Invalid Signature". (exactement comme décrit par smsDecision dans sa mise à jour datant du 26/02/2015, 17h31 du post : https://forum.ovh.com/showthread.php...ESTful-en-java)

Voici le code utilisé, la méthode d'envoi de message :
Code:
            string receivers = string.Join(",", numberTo.Select(n => @"""" + n.Trim() + @"""").ToArray());

            try
            {
                byte[] utfBytes = Encoding.UTF8.GetBytes(message);
                byte[] isoBytes = Encoding.Convert(Encoding.UTF8, Encoding.GetEncoding("ISO-8859-1"), utfBytes);
                string msg = Encoding.GetEncoding("ISO-8859-1").GetString(isoBytes);

                JObject jBody = new JObject();
                jBody.Add("charset", "UTF-8");
                jBody.Add("coding", "8bit");
                jBody.Add("message", msg);
                jBody.Add("receivers", new JArray(numberTo));
                jBody.Add("sender", numberFrom);

                if (!string.IsNullOrWhiteSpace(tag))
                {
                    jBody.Add("tag", tag);
                }

                string body = jBody.ToString();

                string response = InvokeREST("/sms/" + account + "/jobs/", "POST", body);

               ...
Et le détail de la méthode InvokeREST :

Code:
            string uri = "https://eu.api.ovh.com/1.0/sms/" + account + "/jobs/;

            string time = TimeServer;

            string toSign = this.applicationSecret + "+" + this.consumerKey + "+" POST "+" + uri + "+" + body + "+" + time;
            string signature = "$1$" + SHA1Hash(toSign);
            string response = null;

            using (var client = new WebClient())
            {
                client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
                client.Headers.Add(HttpRequestHeader.ContentEncoding, "UTF-8");
                client.Headers.Add(HttpRequestHeader.Accept, "*/*");
                client.Headers.Add("X-Ovh-Application", this.applicationKey);
                client.Headers.Add("X-Ovh-Consumer", this.consumerKey);
                client.Headers.Add("X-Ovh-Signature", signature);
                client.Headers.Add("X-Ovh-Timestamp", time);

                switch (method)
                {
                    case "GET":
                        response = client.DownloadString(uri);
                        break;

                    case "POST":
                        {
                            try
                            {
                                response = client.UploadString(uri, "POST", body);
                            }
                 ...
Méthode SHA1Hash :

Code:
 public string SHA1Hash(string s)
        {
            var sha = SHA1.Create();
            byte[] bHash = sha.ComputeHash(Encoding.UTF8.GetBytes(s));
            StringBuilder sBuilder = new StringBuilder();

            for (int i = 0; i < bHash.Length; i++)
            {
                sBuilder.Append(bHash[i].ToString("x2"));
            }

            return sBuilder.ToString();
        }
Pouvez-vous me dire où je me suis trompé et surtout quel encodage est le bon au final ?

Merci d'avance,

Bruno