2010-12-02 6 views
2

私は以下のコードを持っています。同じ要求を複数回呼び出すと、同じ値(たとえfilenameであっても)が返ってきます。私は怒っていますか? c#/ static修飾子

Iveがコードをステップ実行しただけで、stringbytesもまったく同じです(つまり、GetBytes(string))が同じ値を返しています。

public static string Base64EncodeString(string filename) 
    { 
     var stringbytes = System.Text.Encoding.Default.GetBytes(filename); 
     return Convert.ToBase64String(stringbytes); 
    } 
+1

'stringbytes'が同じなら、' filename'は同じです。値をコンソールに出力するコードをいくつか入れてください。 –

+0

これはうまくいくはずです。あなたはデバッガでそれを見ていますか?おそらく、各呼び出しでfilenameとbase-64文字列の値をログに記録します。 –

+3

@ダニエル:それはまったく真実ではありません。 'filename'のいくつかの異なる値はすべて、' Encoding.Default'でエンコードできない文字を持つことができます。エンコードされた形式の '?'で置き換えることができます。 :) –

答えて

5

私はあなたが見ているとは思わないと思う。そのメソッドEncoding.Defaultでサポートされていない文字を使用している場合を除き、は異なる値のfilenameで呼び出すと同じ値を返しません。 (Encoding.Defaultを使用しないでください。は実際ににプラットフォーム固有のエンコーディングが必要です)

+0

+1:プレートフォーム固有のエンコーディング – TalentTuner

1

コードが正しいように見えます。 Jon Skeetが示唆しているエンコーディングの問題ではない場合は、どこかに静的なfileNameやstringbytes変数があり、投稿されたコードが元のコードと100%同じではないと思います。

0

読み込んでいるファイルをチェックしましたか?開いているファイルをコピーし、別の名前を付けてコンテンツを変更しなかった可能性があります。