🔠
改行なしのBase64エンコードをする方法いろいろ
HTMLで画像を本文中に埋め込む場合などに、data URIを利用することがあります。
例えばこんな感じに使用します:
<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==" alt="Red dot" />
この際、データは基本的には<sub>※例外下記</sub>改行なしのBase64エンコード文字列として埋め込みますが、この文字列を生成するための様々な方法に関する備忘録です。
※補足: 上記の例のように HTML5 の src アトリビュートに埋め込むような場合では、空白があっても無視されるので問題ないようです。
openssl
-A
オプションを付けると改行がなくなります。
openssl base64 -A -in INPUT_FILE -out OUTPUT_FILE
base64 コマンド
同じ base64
という名前のコマンドが複数プラットフォームにあって、かつオプションが微妙に異なるようです...
MacOS版
base64 -i INPUT_FILE > OUTPUT_FILE
GNU Coreutils
-w
オプションで改行までの長さを変更可能。-w 0
にすると改行がなくなります。
base64 -w 0 INPUT_FILE > OUTPUT_FILE
Perl ワンライナー
encode_base64()
の第2引数によって区切りの変更ができます。
perl -MMIME::Base64 -0777 -ne 'print encode_base64($_,"")' < INPUT_FILE > OUTPUT_FILE
Ruby ワンライナー
ruby -r base64 -e "print Base64.strict_encode64($_)" < INPUTFILE > OUTPUT_FILE
encode64 ではなく、 strict_encode64 を使うのがポイント。
Python ワンライナー
あまり上品じゃないが以下で可能
python -c "import sys,base64;print(base64.b64encode(sys.stdin.buffer.read()).decode())" < ¥
INPUT_FILE > OUTPUT_FILE
ちなみに改行発生していいならもっと楽。残念ながら改行をなくすためのオプションが無い。
python -m base64 < INPUT_FILE > OUTPUT_FILE
Discussion