Проблема кодировки для французского акцента (WebRequest) - PullRequest
0 голосов
/ 06 июля 2011

Когда я отправляю этот веб-запрос со строкой, содержащей специальный символ, такой как "é" в queryParam["message"] = sMessage;, в API графа, он публикуется на стене пользователя Facebook "% u00e9".Я тестировал с utf8, а также ISO-8859-1 ...

Вот мой код:

NameValueCollection queryString = System.Web.HttpUtility.ParseQueryString(string.Empty);
queryString["access_token"] = facebookUser.accessToken;
string url = "https://graph.facebook.com/" + facebookUser.id + "/feed?" + queryString;

NameValueCollection queryParam = System.Web.HttpUtility.ParseQueryString(string.Empty);
queryParam["name"] = name;
queryParam["link"] = link;
queryParam["picture"] = picture;
queryParam["description"] = description;
queryParam["source"] = source;
queryParam["caption"] = caption;
queryParam["actions"] = action;
queryParam["message"] = sMessage;

var webRequest = WebRequest.Create(url);
webRequest.ContentType = "text/html; charset=ISO-8859-1";
webRequest.Method = "POST";
//webRequest.Headers.Add(HttpRequestHeader.AcceptCharset, "utf-8");
webRequest.Headers.Add("Accept-Language", "en-us,en;");
webRequest.Headers.Add(System.Net.HttpRequestHeader.AcceptCharset, "ISO-8859-1,utf-8");
byte[] bytes = Encoding.UTF8.GetBytes(queryParam.ToString());
webRequest.ContentLength = bytes.Length;
System.IO.Stream os = webRequest.GetRequestStream();
os.Write(bytes, 0, bytes.Length);
os.Close();

try
{
    var webResponse = webRequest.GetResponse();
    StreamReader sr = null;
    try
    {
        sr = new StreamReader(webResponse.GetResponseStream());
    }
    finally
    {
        if (sr != null)
        {
            sr.Close();
        }
    }
}

У вас есть идея?

1 Ответ

4 голосов
/ 06 сентября 2011

Вы устанавливаете кодировку на ISO-8859-1, а затем используете Encoding.UTF8.GetBytes(). Вы должны использовать Encoding.GetEncoding("ISO-8859-1").GetBytes() или (возможно, лучше) ВСЕГДА ИСПОЛЬЗОВАТЬ UTF-8!

Я вижу, вы установили AcceptCharset в UTF-8, а затем прокомментировали. Но вы забыли о ContentType.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...