Как правильно конвертировать iso-8859-1 в utf8? - PullRequest
3 голосов
/ 03 марта 2012

Мне нужно записать поток ответов в файл. Поток содержит закодированную страницу (iso-8859-1).

Это мой код:

...

using (TextWriter writer = new StreamWriter(tmpFilePath))
{
  using (TextReader reader = new StreamReader(answer, Encoding.GetEncoding("ISO-8859-1")))
  {

    string line = "";
    while ((line = reader.ReadLine()) != null) 
    {

      // try to decode
      string decoded_line = decode(line);

      writer.WriteLine(decoded_line);
    }

  }

}

...


string decode(string message) 
{
  string result = "";

  Encoding iso = Encoding.GetEncoding("iso-8859-1");
  Encoding utf8 = Encoding.UTF8;

  byte[] isoBytes = iso.GetBytes(message);
  byte[] utf8Bytes = Encoding.Convert(iso, utf8, isoBytes);

  result = utf8.GetString(utf8Bytes);

  return result;
}

Проблема в том, что decode () не работает

enter image description here

Как правильно конвертировать iso-8859-1 в utf8?

UPDATE

Я полагаюсь на fiddler для получения типа контента:

enter image description here

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Учитывая ситуацию, этого должно быть достаточно:

using (TextWriter writer = new StreamWriter(tmpFilePath, Ecoding.UTF8))
{
 using (TextReader reader = new StreamReader(answer, Encoding.GetEncoding("ISO-8859-1")))
 {
   while ((line = reader.ReadLine()) != null) 
   {
      writer.WriteLine(decoded_line);
   }
 }    
}

Если это не сработает, проверьте свои данные.Как (первая) строка выглядит в отладчике?

1 голос
/ 03 марта 2012

Вы декодируете дважды - вы уже указали кодировку при создании StreamReader.Результирующая строка уже должна быть правильно декодирована.

Это не объясняет, почему message выглядит так - она ​​должна выглядеть как обычная строка.Вы уверены, что файл, который вы читаете, содержит то, что, как вы думаете, он содержит?

...