2016-07-13 6 views
0

Я пытаюсь загрузить файл через RESTful Webservice, а затем сохранить файл на компьютере.Невозможно преобразовать UTF8 в кодировку по умолчанию

Я использую 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

Я уже пробовал несколько способов преобразования строки без каких-либо различий.

ответ

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

Вы можете использовать метод Encoding.Convert.

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

Спасибо, но с помощью этого имеет точно такой же эффект. –

+0

@TimoRzipa - Что произойдет, если вы используете перегрузку [WriteAllBytes] (https://msdn.microsoft.com/en-us/library/ms143376 (v = vs.110) .aspx), которая принимает тип кодировки как последний параметр? – keyboardP

+0

Нет перегрузки, которая также принимает тип кодирования. Байты никак не закодированы, поэтому проблема должна быть где-то в строках. Я думаю, может быть, это даже моя ошибка, а проблема веб-службы. –

Смежные вопросы