2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidアプリ・iOSアプリでBase64エンコードされた文字列をURLエンコードする

Posted at

スマホアプリからBase64エンコード化した文字列をサーバに送信する場合、適切にURLエンコードする必要があるので、その方法についてのメモ

前提

送信する形式は、GETもしくはForm送信時と同形式のPOSTとする
この場合、

key1=value1&key2=value2&...

という形式でキー&バリューを並べる事になる
また、application/x-www-form-urlencodedという規格に従ってURLエンコードを行う必要がある
例えば、+は半角スペースと認識されるため、%2Bに変換しておく必要がある

方針

Base64エンコードで出てくる文字は[a-zA-Z0-9+/]の64種類であり、その中でエンコードの必要があるのは+/の2種類のみである(厳密に言えば、パディングで利用される=もあるようだが、本記事では一旦置いておく)
そのため、これら2種類の文字がエンコードされるよう、利用するメソッドやその引数を選択すれば良い

各プラットフォームごとの方法

Android

AndroidのSDKに用意されているURLEncoderを利用すれば十分である
以下Kotlinでの実装例

実装例
val original = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"
val encoded = URLEncoder.encode(original, "utf-8")
println("Encoded: $encoded")
実行結果
Encoded: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%2B%2F

iOS

Swiftを利用する場合、URLエンコードにはStringのaddingPercentEncodingメソッドが利用できる
エンコード例外文字列には、アルファベットと数字のみ(alphanumerics)を指定すれば十分である
以下Swiftでの実装例

実装例
let original = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+/"
let encoded = original.addingPercentEncoding(withAllowedCharacters: .alphanumerics)!
print("Encoded: \(encoded)")
実行結果
Encoded: 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ%2B%2F

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?