2016-06-23 5 views
2

は、この質問はおそらく、回答されているが、私はそれどのようにしてbase64でlinux上の文字列をエンコードすることができるので、 "Unicode.GetBytes.ToBase64String"というウィンドウに一致しますか?

質問

どのようにI「base64でエンコード」が一致した「何のウィンドウが期待する」ので、bashの文字列、すなわち「Unicodeを見つけることができませんでした

コンテキスト「.GetBytes.ToBase64String

PowerShellのヘルプテキストは、この例があり

$command='dir' 
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command) 
$encodedCommand = [Convert]::ToBase64String($bytes) 
echo $encodedCommand 
powershell.exe -encodedCommand $encodedCommand 

Windowsの出力エンコード出力がこれです

:Linux上

ZABpAHIA 

非常に異なる結果

私はLinux上で同じことをすれば、私はこれを取得:

echo "dir" | base64 
ZGlyCg== 

エンコーディング?

「iconv」を使用してエンコードを変換しようとしましたが、運がない、つまり同じ結果が得られました。

エコーDIR |のiconv -f ASCII -t UTF-8 | BASE64

違い

ですから、2つの違いを確認できます。

  • 英数字の文字が「
  • 末尾が異なります=== "はLinuxに表示されます
+0

をエコー 'より望ましいprintf''使い方 - n ': '変数=' dir '; printf '%s' "$ variable" ' –

+0

末尾=はパディングに使用されます。ストリングは、その長さが4であるため、おそらく埋められるでしょう。実際、3つの元のバイトごとに、3つの8ビット= 4 x 6ビットとして4つのエンコードされたバイトが与えられます。 – Phil1970

答えて

2

PowershellのUnicodeはUTF16 LEであり、UTF8ではありません。

Unicode:リトルエンディアンのバイトオーダーを使用してUTF-16形式でエンコードします。

出典:Set-Content for FileSystem

私は、Linuxを使用しませんが、作品以上のごUTF8-サンプルならば、あなたは試みることができる:

iconv -f ASCII -t UTF-16 mycmd.txt |base64 
+0

'UTF-16LE'は' iconv'に必要なエンコーディングかもしれません。 –

+0

私はLinuxが文字列のヌルターミネーターをエンコードしていると思いますが、Windowsではそうでないと思います。それ以外の場合、Linuxのエンコードされた文字列はおそらく4バイトでしょう。 – Phil1970

+0

@ Phil1970:ヌルターミネータではなく、 'echo'によって出力される改行文字です。 'printfディレクトリ| iconv -f UTF-8 -t UTF-16LE | base64'となる。 –

関連する問題