簡體   English   中英

C# HttpClient 在響應中處理瑞典字符 åäö

[英]C# HttpClient handle swedish characters åäö in response

在 Burp 中發送測試請求時,我在瑞典語中獲得了正確的 åäö 值,但使用 HttpClient 我只能得到這個字符:

在此處輸入圖片說明

我嘗試將Accept-Language標頭設置為sv-SEsv但結果相同。 我也嘗試過獲取GetByteArrayAsync並將其轉換為 UTF-8,但也沒有運氣。

private HttpClient client = new HttpClient();

public HttpService()
{
    client.DefaultRequestHeaders.Add("Accept-Language", "sv");
    client.DefaultRequestHeaders.Add("Accept-Charset", "utf-8");
}

public string GetRequest(string url)
{
    using (HttpResponseMessage response = client.GetAsync(url).Result)
    {
        //Same result
        //var byteArray = response.Content.ReadAsByteArrayAsync().Result;
        //var result = Encoding.UTF8.GetString(byteArray, 0, byteArray.Length);
        using (HttpContent content = response.Content)
        {
            var result = content.ReadAsStringAsync().Result;
            return result;
        }
    }

}

更新:

來自服務器的標頭:

HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 31903
Content-Type: application/json
Expires: Sun, 14 May 2017 22:00:00 GMT
Server: Microsoft-IIS/8.5
Set-Cookie: ASPSESSIONIDCSACQTRA=<REMOVED>; path=/
X-Powered-By: ASP.NET
Date: Mon, 15 May 2017 13:10:18 GMT

謝謝@RemusRusanu。 工作代碼:

public string GetRequest(string url)
{
    using (HttpResponseMessage response = client.GetAsync(url).Result)
    {
        var byteArray = response.Content.ReadAsByteArrayAsync().Result;
        var result = Encoding.GetEncoding("ISO-8859-1").GetString(byteArray, 0, byteArray.Length);
        return result;
    }
}

Ogglas 的回答會為 åäö 修復它,但可能不適用於 ÅÄÖ。 ISO-8859-1 對應於
- Windows-1252 西歐 (Windows)。 代碼頁 1252
或者
- iso-8859-1 西歐 (ISO)。 代碼頁 28591

為了確保獲得正確的編碼,您可能需要改用Encoding.GetEncoding(int codePage) 有關不同編碼的詳細信息, 參閱https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding?view=netframework-4.8

這是一個示例代碼,其中響應字符串是 ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdefghijklmnopqrstuvwxyzåäö0123456789!"#¤%&/()=?^*_:;>@£${[]}\\~|<,.-¨'´+

using System.Net.Http;
using log4net;
using System.Text;

namespace Stackoverflow
{
    public static class Enc {

        private static readonly ILog log = LogManager.GetLogger(typeof(Enc));

        public static string GetRequest(HttpClient client, string url, int codepage) {
            using (HttpResponseMessage response = client.GetAsync(url).Result) {
                var byteArray = response.Content.ReadAsByteArrayAsync().Result;
                var result = Encoding.GetEncoding(codepage).GetString(byteArray, 0, byteArray.Length);
                return result;
            }
        }

        public static void Example(HttpClient client, string url) {
            string result1 = GetRequest(client, url, 1252);
            string result2 = GetRequest(client, url, 28591);
            log.Debug(result1);
            log.Debug(result2);
        }
    }
}

這給出了輸出:

ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖabcdefghijklmnopqrstuvwxyzåäö0123456789!"#¤%&/()=?^*_:;>@£${[]}\~|<,.-¨'´+"
ABCDEFGHIJKLMNOPQRSTUVWXYZÿÿÿabcdefghijklmnopqrstuvwxyzåäö0123456789!"#¤%&/()=?^*_:;>@£${[]}\~|<,.-¨'´+

哪里 ÿ 顯示為黑色字符 xC3? 在我的日志中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM