81

Powershell には、Base64 テキストを含むテキスト ファイルからの通常の文字列があります。に格納されてい$xます。私はそれを次のようにデコードしようとしています:

$z = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($x));

これ$xは、Powershell で作成された Base64 文字列の場合に機能します (ただし、そうではありません)。そして、これは$xファイルから取得した Base64 文字列では機能せず、$z単純に䐲券.

私は何が欠けていますか?たとえば、これは の Base64 である$x可能性があります。YmxhaGJsYWg=blahblah

一言で言えば、YmxhaGJsYWg=テキストファイルにあり、このPowershellコードの文字列に入れられ、それをデコードしようとしましたが、最終的に䐲券etc.

4

6 に答える 6

119

エンコードはテキストをbase64に変換し、デコードはbase64をテキストに戻しませんか?あなたはここでそれらを混同しているようです。このオンラインデコーダーを使用してデコードすると、次のようになります。

BASE64: blahblah
UTF8: nVnV

その逆ではありません。PSでは完全に再現できません。以下のサンプルを参照してください。

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("blahblah"))
nV�nV�

PS > [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("nVnV"))
blZuVg==

編集私はあなたがあなたのテキストに間違ったエンコーダーを使用していると信じています。エンコードされたbase64文字列は、UTF8(またはASCII)文字列からエンコードされます。

PS > [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
blahblah

PS > [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
汢桡汢桡

PS > [System.Text.Encoding]::ASCII.GetString([System.Convert]::FromBase64String("YmxhaGJsYWg="))
blahblah
于 2013-03-14T17:06:13.033 に答える
5

Base64 エンコーディングは、3 つの 8 ビット バイト (0 ~ 255) を 4 つの 6 ビット バイト (0 ~ 63、別名 base64) に変換します。4 バイトのそれぞれは、4 つの 8 ビット ASCII 文字として最終出力を表す ASCII 文字列にインデックスを付けます。インデックス付き文字列は通常、'A-Za-z0-9+/' で、'=' がパディングとして使用されます。これが、エンコードされたデータが 4/3 長い理由です。

Base64 デコードは逆のプロセスです。そして予想通り、デコードされたデータは 3/4 の長さです。

base64 エンコーディングはプレーン テキストをエンコードできますが、その本当の利点は、送信システムによって制御文字として解釈される可能性のある印刷不可能な文字をエンコードすることです。

元のポスターは $z をバイトとしてレンダリングし、各ビットはアプリケーションにとって意味を持つことをお勧めします。通常、印刷できない文字をテキストとしてレンダリングすると、システムのローカリゼーションに基づいてグリフを生成する Unicode が呼び出されます。

Base64decode("宇宙とすべての生命への答え") = 00101010

于 2014-12-24T15:38:37.843 に答える
4

出力の間にスペースが表示されるという問題があり、この問題を解決するオンラインの回答がまったくありませんでした。私は文字通り何時間もかけて解決策を見つけようとしましたが、コードをいじってから、それを機能させたときに何を入力したのかさえほとんどわからないほどの解決策を見つけました。この問題に対する私の修正は次のとおりです。[System.Text.Encoding]::UTF8.GetString(([System.Convert]::FromBase64String($base64string)|?{$_}))

于 2016-04-29T07:49:25.897 に答える