我向API发送请求,服务器以俄语发送部分响应。我使用代码页1251编码来解码响应,但仍然无法得到我想要的结果。
如何将回复转换回普通英语?我使用什么编码?
答案 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);