Rikisan
@Rikisan
техник-программист

Как из стоки windows-1251 получить строку UTF-8 на C#?

У меня есть string в котором описан json для post запроса. В нем есть русские слова. При отправки запроса все что на русском отправляется пустотой.
Как можно перевести запрос в UTF-8?
  • Вопрос задан
  • 11314 просмотров
Решения вопроса 1
DmitryITWorksMakarov
@DmitryITWorksMakarov
может так попробовать?

readonly static System.Text.Encoding WINDOWS1251 = Encoding.GetEncoding(1251);
readonly static System.Text.Encoding UTF8 = Encoding.UTF8;

static string ConvertWin1251ToUTF8(string inString)
{
     return UTF8.GetString(WINDOWS1251.GetBytes(inString));
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
petermzg
@petermzg
Самый лучший программист
В платформе .NET все строки представлены как UTF-16.
Поэтому нет "строки windows-1251", а есть UTF-16 строка, которая была заполнена символами из источника, в котором символы были сохранены в windows-1251.

Из этого становится виден сценарий:
1. Считать файл байтов, где символы кодируются в windows-1251.
2. Преобразовать в UTF-16
3. Выполнить над строками различные необходимые действия.
4. Сохранить результат с преобразованием в набор байт, где символы представленны как UTF-8.

И пример кода:
1-2. Построчное чтение из файла с windows-1251
using (var stream = new StreamReader(fileName, Encoding.GetEncoding(1251)))
{
     while (stream.Peek() >= 0)
     {
           var line = stream.ReadLine();
     }
}

4. Помещаем в тело запроса набор байт, где символы в UTF-8
using (var stream = webRequest.GetRequestStream())
      using (var writer = new StreamWriter(stream, Encoding.UTF8))
           writer.Write(yourstring);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы