職場では、ブラウザー側で html 5/javascript を使用し、Web サービスで C# を使用して、Web ページから Web サービスにファイルをアップロードしようとしています。しかし、ある種のエンコーディングには問題があります。
JavaScript に関しては、FileReader の助けを借りてファイルのバイナリ データを取得します。
var file = ... // gets the file from an input
var fileReader = new FileReader();
fileReader.onload = dataRecieved;
fileReader.readAsBinaryString(file);
function dataRecieved() {
// Here we do a normal jquery ajax post with the file data (fileReader.result).
}
XmlHttpRequest (または同様のもの) の助けを借りずに手動でデータを投稿しているのは、Web ページのさまざまな部分 (関数にラップされている) から Web サービスへの全体的な投稿を簡単にするためです。しかし、それは問題ではないようです。
Web サービスのコードは次のようになります
[WebMethod]
public string SaveFileValueFieldValue(string value)
{
System.Text.UnicodeEncoding encoder = new UnicodeEncoding();
byte[] bytes = encoder.GetBytes(value);
// Saves file from bytes here...
}
すべてが正常に機能し、データは正常に見えますが、ファイル (例として画像) を開こうとすると、開くことができません。非常に基本的なテキスト ファイルは問題ないようです。しかし、画像のような「バイナリ」ファイルをアップロードし、元のバージョンとアップロードされたバージョンの両方を通常のテキスト エディターでメモ帳として開いて違いを確認すると、「見えない」文字がいくつかあるだけで問題があるようです。先頭から数バイト先に改行して表示します。
基本的に、ファイルは変換のどこかで数バイト間違ってエンコードされているようです。
また、データからjavascriptでint配列を作成しようとしましたが、Webサービスでbyte []に変換しましたが、まったく同じ問題がありました。Unicode 以外 (UTF-8 など) で変換しようとすると、元のデータとはまったく異なるデータになるため、ここでは正しい軌道に乗っていると思いますが、少し間違っています。