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

时间:2012-03-02 21:57:46

标签: 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.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?

更新

我依靠fiddler获取内容类型:

enter image description here

3 个答案:

答案 0 :(得分:3)

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

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 :(得分:1)

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

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

答案 2 :(得分:-1)

你可以看到示例 .NET 转换代码,任何编码到任何编码都可以与 Azure Function 一起工作,但可能可以重新托管在 .NET 可以运行的任何地方:

https://docs.microsoft.com/en-us/archive/blogs/david_burgs_blog/support-non-utf-payloads-in-logic-app-with-a-conversion-azure-function

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

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

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