2016-07-13 13 views
0

RESTful Webサービス経由でファイルをダウンロードし、そのファイルをコンピュータに保存しようとしています。UTF8をデフォルトのエンコーディングに変換できません

私はコードをテストするためにPDFファイルを使用しています。データがUTF-8でエンコードされていることがわかったので、エンコードを元に戻してみました。なぜなら、ローカルでpdfファイルを読み込んで、それを再び書き直して見つけたからです。文字列を比較すると、次の(第2ライン)を示し

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

また、エンコードタイプをとるオーバーロードはありません。バイトは決して符号化されないので、問題は文字列のどこかにある必要があります。私は多分それは私のせいではないが、ウェブサービスの問題だと思う。 –

関連する問題