簡體   English   中英

如何將 iso-8859-1 正確轉換為 utf8?

[英]How can I convert iso-8859-1 to utf8 correctly?

我需要將響應流寫入文件。 該流包含一個編碼頁面 (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?

更新

我依靠提琴手來獲取內容類型:

在此處輸入圖片說明

鑒於這種情況,應該足以:

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

如果這不起作用,請檢查您的數據。 (第一)行在調試器中的外觀如何?

您正在解碼兩次 - 您在創建 StreamReader 時已經指定了編碼。 結果字符串應該已經被正確解碼。

這並不能解釋為什么message看起來像那樣——它應該看起來像一個普通的字符串。 您確定您正在閱讀的文件包含您認為的內容嗎?

你可以看到示例 .NET 轉換代碼,任何編碼到任何編碼與 Azure 函數一起工作,但可能可以重新托管在 .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)

字節數組也可以直接讀取和寫入文件句柄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM