C# 如何将iso-8859-1正确转换为utf8?

C# 如何将iso-8859-1正确转换为utf8?,c#,encoding,utf-8,iso-8859-1,C#,Encoding,Utf 8,Iso 8859 1,我需要将响应流写入文件。该流包含一个编码页(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

我需要将响应流写入文件。该流包含一个编码页(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()不起作用

如何将iso-8859-1正确转换为utf8

更新

我依靠fiddler获得内容类型:


您解码了两次-您在创建StreamReader时已经指定了编码。结果字符串应该已经被正确解码


这并不能解释为什么
message
看起来像这样-它应该看起来像一个普通的字符串。您确定正在读取的文件包含您认为包含的内容吗?

鉴于这种情况,它应该足以:

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);
   }
 }    
}

如果这不起作用,请检查您的数据。(第一)行在调试器中的外观如何?

您可以看到示例.NET将任何编码转换为任何编码,与Azure函数一样工作,但可能会在.NET可以运行的任何位置重新托管:

此示例保护base64编码中的输入和输出内容,以确保字符串类型的.NET unicode假设不会妨碍

 var outputBytes = Encoding.Convert(srcEncoding: inputEncoding, dstEncoding: encodingOutput, bytes: Convert.FromBase64String(input));
...
text = Convert.ToBase64String(outputBytes)

字节数组也可以直接读写到文件句柄。

消息的内容看起来不像是有效的ISO-8859-1Delete your decode()方法,解码和编码已经由StreamReader/Writer处理。如果您仍然有问题,那么您没有正确猜测输入文件的编码。