解码来自俄语(西里尔语)的Http响应内容

时间:2016-04-29 12:37:22

标签: c# encoding

我向API发送请求,服务器以俄语发送部分响应。我使用代码页1251编码来解码响应,但仍然无法得到我想要的结果。

如何将回复转换回普通英语?我使用什么编码?

2 个答案:

答案 0 :(得分:2)

如果您只需要将俄语字母(西里尔语)转换为拉丁语字母,您可以使用具有西里尔语 - 拉丁语关系的字典结构。

var map = new Dictionary<char, string>
{
    { 'Ж', "G" },
    { 'е', "e" },
    { 'ф', "f" },
    { 'Й', "Y" },
    ...
}

var result = string.Concat("Россия".Select(c => map[c]));

答案 1 :(得分:2)

不确定我是否正确理解您的意图,但如果HttpClient您可以使用Windows-1251(或其他编码),请执行以下操作:

using (var httpClient = new HttpClient())
{
    var httpResponse = await httpClient.GetAsync("requestUri");
    var httpContent = await httpResponse.Content.ReadAsByteArrayAsync();
    string responseString = Encoding.GetEncoding(1251).GetString(httpContent, 0, httpContent.Length);

    // - check status code
    // (int)httpResponse.StatusCode
    // - and here's your response
    // responseString
}

如果responseString仍然包含一些乱码,那么我会假设此服务器不使用Windows-1251,而是使用其他一些编码,因此首先您需要确切地确定哪一个。

P.S。要让Encoding.GetEncoding(1251)工作,您可能需要安装System.Text.Encoding.CodePages NuGet包并注册编码提供程序:

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);