Проблема с кодировкой WebClient
Написал простенького Telegram бота на C# для получения случайных анекдотов через API, деплоил на Azure.
Класс, реализующий команду получения и отправки анекдотов:
public class JokeCommand : Command
{
public override string Name => "joke";
public override async Task Execute(Message message, TelegramBotClient client)
{
var chatId = message.Chat.Id;
try
{
string joke = GetJoke();
await client.SendTextMessageAsync(chatId, joke);
}
catch(Exception ex)
{
await client.SendTextMessageAsync(chatId, ex.Message);
}
}
private string GetJoke()
{
string url = "http://rzhunemogu.ru/RandJSON.aspx?CType=1";
JObject json;
using (var webClient = new WebClient())
{
string response = webClient.DownloadString(url);
json = JObject.Parse(response);
}
string joke = json["content"].ToString();
return joke;
}
}
В телеграме получаю такой ответ:
- Ñêàæèòå, - äîïûòûâàåòñÿ ìîëîäîé ïèñàòåëü ó ðåäàêòîðà, - åñòü âîîáùå íàäåæäà, ÷òî ìîé ðàññêàç ïîÿâèòñÿ â âàøåì æóðíàëå?
- Íó ðàçóìååòñÿ. Âñå ëþäè ñìåðòíû, è ÿ - íå âå÷åí.
Подскажите, в чём может быть проблема и как решить?
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Известная проблема с кодировками в WebClient.DownloadString, там кодировку надо задавать явно. Для автоматического определения кодировки используйте HttpClient.
public class JokeCommand : Command
{
private static readonly HttpClient client = new HttpClient();
public override string Name => "joke";
public override async Task Execute(Message message, TelegramBotClient client)
{
var chatId = message.Chat.Id;
try
{
string joke = await GetJokeAsync();
await client.SendTextMessageAsync(chatId, joke);
}
catch(Exception ex)
{
await client.SendTextMessageAsync(chatId, ex.Message);
}
}
private async Task<string> GetJokeAsync()
{
const string url = "http://rzhunemogu.ru/RandJSON.aspx?CType=1";
string response = await client.GetStringAsync(url);
return JObject.Parse(response)["content"].ToString();
}
}