[英]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 可以運行的任何地方:
此示例以 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.