我需要写一个文件的响应流。该流包含一个编码页面(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获取内容类型:
答案 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 可以运行的任何地方:
此示例以 base64 编码保护输入和输出内容,以确保字符串类型的 .NET unicode 假设不会妨碍。
var outputBytes = Encoding.Convert(srcEncoding: inputEncoding, dstEncoding: encodingOutput, bytes: Convert.FromBase64String(input));
...
text = Convert.ToBase64String(outputBytes)
字节数组也可以直接读取和写入文件句柄。