2

これは私のコードです(ファイルはHttpPostedFileBaseタイプです):

var imageStream = file.InputStream;
var header = new Byte[4];
imageStream.Read(header, 0, header.Length);

ここで、コードの実行中にブレークポイントを配置し、すぐに表示されるウィンドウで値を確認します。

header
{byte[4]}
    [0]: 255
    [1]: 216
    [2]: 255
    [3]: 224

しかし、このバイト配列をASCIIの文字列に変換したい場合、これを取得します(即時ウィンドウで取得された値):

Encoding.ASCII.GetString(header)
"????"
Encoding.ASCII.GetString(header, 0, 2)
"??"

私は何を間違っていますか?

4

3 に答える 3

5

127 を超える文字は ASCII (7 ビット エンコーディング) として表すことができないため、?.

何を達成しようとしていますか?あなたがやろうとしていることにより適しているかもしれない他の多くのエンコーディングがあります - またはエンコーディングがまったくないかもしれません。char は byte と同等ではないことを理解することが重要です。

ヘッダーが「固定」の 4 バイト シーケンスである場合は、文字を使用せず、バイトを直接使用します (または整数表現 - バイト配列を他のものに変換するための BitConverter クラスを参照してください)。

于 2012-09-10T15:46:25.717 に答える
3

ASCII 文字コードの範囲は 0 から 127 までです。あなたのデータはその範囲外です。したがって、データを ASCII として解釈しようとすると失敗します。?文字は、デコードできなかった文字を示すために使用されます。

最初の 4 バイト (16 進数) は次のとおりです。

FF D8 FF E0

これはJPEG ファイルのヘッダーです。

したがって、これらのバイトを文字列に変換することは、適切な方法ではありません。

于 2012-09-10T15:47:08.713 に答える
1

これらの文字は ASCII を使用して印刷できないためです -Encoding.UTF8.GetString(header)代わりに使用してみてください。

編集: UTF8 をやみくもに使用するのは不適切に思われるため、おそらく次のことを試すことができます:- Request.ContentEncoding.GetString(header)これは、リクエストで構成されたエンコーディングを使用する必要があります。

于 2012-09-10T15:48:21.427 に答える