分からないこと
Microsoft Graph APIを使用してOneDriveにshift-jisのファイルを文字コードを変えずにアップロードしたいのですが、アップロード後のファイルを開くとutf-8に変わってしまっています。
アップロードセッション作成時や、アップロード時に追加で必要な設定があるか、
またはPOSTやPUTリクエスト発行時に必要な設定があるか、
などご存じの方いらっしゃいましたら教えていただきたいです。
発生している問題
文字コードがutf-8に代わってしまう。
csv形式なので、エクセルで開くと文字化けしてしまう。
該当のソースコード
C#
1// **** アクセストークンは事前に取得しています **** 2 3// **** アップロードセッションを作成して、アップロード用URLを取得 **** 4 5var url = $"https://graph.microsoft.com/v1.0/drives/{driveId}/items/{itemId}:/{targetFile}:/createUploadSession"; 6var requestPost = new HttpRequestMessage(HttpMethod.Post, url); 7requestPost.Headers.Add("Authorization", $"bearer {accessToken}"); 8var parametersPost = $@"{{""@microsoft.graph.conflictBehavior"":""replace""}}"; 9requestPost.Content = new StringContent(parametersPost, Encoding.UTF8, @"application/json"); 10 11var response = m_client.SendAsync(requestPost).Result; 12var result = response.Content.ReadAsStringAsync().Result; 13var uploadSession = JsonConvert.DeserializeObject<Response>(result); 14 15 16// **** 取得したアップロード用URLでファイルをアップロード **** 17 18var encoding = Encoding.GetEncoding("shift_jis"); // ★shif_jisを取得 19using (var sr = new StreamReader(readStream, encoding)) 20{ 21 var content = sr.ReadToEnd(); 22 var Content = new StringContent(content); 23 24 Content.Headers.Clear(); 25 Content.Headers.Add("Content-Type", "text/plain; charset=Shift_JIS"); 26 Content.Headers.Add("Content-Length", "285"); // ★実際には送信するバイト数を取得して値を設定しています 27 Content.Headers.Add("Content-Range", "bytes 0-284/285");// ★実際には送信するバイト数とトータルのバイト数を取得して値を設定しています。形式は同じです。 28 29 m_client.PutAsync(uploadSession.uploadUrl, Content).Result; // ★uploadSession.uploadUrl = 取得したアップロード用URLです。 30}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
●コンテンツヘッダーを'application/octet-stream'に変更してみましたが、解決せずUTF-8に変わってアップロードされてしまいました。
C#
1Content.Headers.Add("Content-Type", "application/octet-stream; charset=Shift_JIS");
●アップロード元ファイルはSJISとなっていることを確認済みです。
補足
特になし
回答1件
あなたの回答
tips
プレビュー