Different output between Powershell ToBase64String & Linux base64
bash, c, c++, powershell
Solution
You need to use `iconv` to convert from UTF-8 to UTF-16 without a byte order mark:
$ echo -n 'BASE64' | iconv -f UTF8 -t UTF16LE | base64
QgBBAFMARQA2ADQA
The `UTF16LE` causes it to omit the BOM.
See https://superuser.com/q/381056/4206, where someone asks about forcibly including the BOM, but you want the opposite, which -- conveniently -- is in the question.
Problem
SGVsbG8sIHdvcmxkIQ== I have to write two scripts, one for Windows Server and another for Ubuntu Server. To illustrate, if my bash script runs: ``` echo -n 'BASE64' | base64 ``` the result is `QkFTRTY0`. If my PowerShell Script runs: ``` [System.Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('BASE64')) ``` the result is `QgBBAFMARQA2ADQA`. Is important get the same PowerShell string in Linux. Anybody knows why this difference and some solution to my problem? I think that the problem is related to Unix's UTF-8 encoding, but I can't find a solution. I can decode the PowerShell output in Linux, but I can't encode a string in Linux and get the same result as PowerShell. A bash solution is optimal, but a C/C++ code solution or guide works too.