无法将UTF8转换为默认编码

时间:2016-07-13 11:14:06

标签: c# encoding utf-8

我正在尝试通过RESTful Web服务下载文件,然后将该文件保存在计算机上。

我正在使用PDF文件来测试代码。我发现数据是UTF-8编码所以我尝试将其编码回默认值,因为我通过在本地读取pdf文件并再次将其写回来发现它以这种方式工作。

这是我的代码:

IConsumerRequest getDocumentRequest = class.consumerSession
    .Request()
    .ForMethod("GET")
    .ForUri(new Uri(class.apiEndpoint + "/1/documents/" + id))
    .SignWithToken(class.accessToken);

string test = System.IO.File.ReadAllText("C:\\test.pdf", Encoding.Default);

byte[] bytes = Encoding.UTF8.GetBytes(getDocumentRequest.ToString());
string data = Encoding.Default.GetString(bytes);

MessageBox.Show(test.Substring(0, 120) + "\n\n" + data.Substring(0, 120));

SaveFileDialog saveFileDialog = new SaveFileDialog();

saveFileDialog.FileName = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();

if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
    System.IO.File.WriteAllBytes(saveFileDialog.FileName, bytes);
}

比较字符串显示以下内容(第二行): Local String vs String from Webservice

我已经尝试了几种方法来转换字符串而没有任何区别。

2 个答案:

答案 0 :(得分:0)

您可以使用Encoding.Convert方法。

byte[] converted = Encoding.Convert(Encoding.UTF8, Encoding.Default, bytes);

答案 1 :(得分:0)

使用HttpWebResponse:

HttpWebResponse webResponse = getDocumentRequest.ToWebResponse();

Stream stream = webResponse.GetResponseStream();
Encoding enc = System.Text.Encoding.GetEncoding(UTF8);
StreamReader loResponseStream = new StreamReader(webResponse.GetResponseStream(), enc);

string serverResponse = loResponseStream.ReadToEnd();

SaveFileDialog saveFileDialog = new SaveFileDialog();

saveFileDialog.FileName = dataGridView1.Rows[e.RowIndex].Cells[2].Value.ToString();

if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
    System.IO.File.WriteAllText(saveFileDialog.FileName, serverResponse, Encoding.Default);
}