Java8のjava.util.Base64クラスでのgetEncoderとgetUrlEncoder,getDecoderとgetUrlDecoderの違い

Java8のjava.util.Base64クラスでのgetEncoderとgetUrlEncoder,getDecoderとgetUrlDecoderの違い

Java8からjava.util.Base64クラスを使ってエンコード&デコードが出来るようになりました。

これでエンコードが出来ます。もう一つgetUrlEncoder()メソッドがあり、こちらもエンコードを行います。

getEncoderとgetUrlEncoderの違い

getEncoderとgetUrlEncoderの違いはUrl safeかどうかの違いです。

メソッド Urlセーフ
getEncoder ×
getUrlEncoder

Urlセーフの場合は、+が-に置換、/が_に置換されます。Urlアンセーフの場合は、+と/はそのまま使われます。

getDecoderとgetUrlDecoderの違いも同じです。

その為、エンコードした内容に+と/が含まれない場合に限り、getEncoderでエンコードしたのに対してgetUrlDecoderでデコードしても正常にデコードできてしまいます。

以下サンプルコードです。

但しgetEncoderでエンコードした結果に+か/が含まれる場合、getUrlDecoderでデコードするとエラーになります。

getUrlEncoderでエンコードし、getDecoderでデコードする場合も同じくエラーになる可能性があります。(-と_が含まれる場合のみ)

以下getEncoderでエンコード、getUrlDecoderでデコードしてエラーとなるサンプルコードです。

上記ソースの12行目のデコードをgetDecoderに修正すれば正しくデコードできるようになります。

  • このエントリーをはてなブックマークに追加
  • Evernoteに保存Evernoteに保存

コメントをどうぞ

メールアドレスが公開されることはありません。

CAPTCHA