0

元の形式に変換しようとしているバイト配列として、Base64 でエンコードされたデータがいくつかあります。

データは 2 回エンコードされた関数に到達します。私が達成したいのは次のようなものです:

string encoded = "some base 64 string";
byte [] data = System.Convert.FromBase64String(System.Convert.FromBase64String(encoded));

もちろん、上記のステートメントは間違っています。使用する関数の組み合わせを理解できず、試したときにユニコードの問題に遭遇したからです。任意のポインタをいただければ幸いです。

4

4 に答える 4

3

私があなたの問題を正しく理解しているなら、あなたはこれをやろうとしています:

  • base64 文字列をバイト配列に変換する
  • バイト配列を ASCII 文字列に変換します
  • その文字列をbase64でバイト配列に変換します

その場合、ステートメントは次のようになります。

byte[] twiceDecoded = Convert.FromBase64String(Encoding.ASCII.GetString(Convert.FromBase64String(encoded)));
于 2012-12-12T18:48:49.273 に答える
2

以下のサンプル データとコードを使用して、docx(またzip) ファイル ( 50 4B 03 04 14 00) の署名を取得できました。投稿したサンプルがencoded文字列の先頭からのものである場合、ほとんどの場合、以下のコードが機能します。

byte[] buf = Convert.FromBase64String(encoded);
var hex2 = Encoding.Unicode.GetString(buf);
byte[] data = Convert.FromBase64String(hex2);
于 2012-12-12T18:47:02.667 に答える
0

私はあなたが好む出力形式に依存します。これは、base64 値を復号化し、UTF8 形式の文字列を返す小さなサンプル コードです。

public static string DecodeFrom64(string value)
{
    byte[] encodedDataAsBytes = System.Convert.FromBase64String(value);
    return System.Text.Encoding.UTF8.GetString(encodedDataAsBytes);
}
于 2012-12-12T18:46:16.217 に答える
0

私の理解が正しければ、byte[]base64 でエンコードされたデータを含む があり、元の文字列を含む を取得したいと考えてstringいます。

あなたがしなければならない最初のことは、それbyte[]string. 配列に含まれるバイト数と、使用されたテキスト エンコーディング (つまり、UTF-8、Unicode、ASCII など) がわかっていると仮定すると、次のように記述できます。

string base64String = Utf8Encoding.GetString(bytes);

そこを正しいテキストエンコーディングに置き換えますUtf8Encoding。文字列が実際に base64 である場合、Utf8Encoding が機能するはずです。または、文字あたり 2 バイトの場合は、おそらく Unicode エンコーディングの 1 つです。

その後、次のように元の文字列を取得できるはずです。

string originalString = Convert.FromBase64String(base64String);
于 2012-12-12T18:46:46.110 に答える