C# で Base64 URL セーフ エンコーディングを実現するにはどうすればよいでしょうか? 質問する

C# で Base64 URL セーフ エンコーディングを実現するにはどうすればよいでしょうか? 質問する

C# で Base64 URL セーフ エンコーディングを実現したいと考えています。Java には、URL セーフ エンコードされた文字列を提供する共通Codecライブラリがあります。C# を使用して同じことを実現するにはどうすればよいでしょうか。

byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes("StringToEncode");
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes);

上記のコードは Base64 に変換しますが、パディングを行います==。URL セーフ エンコーディングを実現する方法はありますか?

ベストアンサー1

よくあるのはアルファベットを入れ替えるだけURL で使用する場合は % エンコードは不要です。65 文字のうち、問題となるのは 、 、 の 3 文字だけです+/最も=一般的な置換は-の代わりに+_の代わりにです/。パディングについては、次のようになります。削除するだけです=);あなたは推測する必要なパディングの量。反対側では、プロセスを逆にするだけです。

string returnValue = System.Convert.ToBase64String(toEncodeAsBytes)
        .TrimEnd(padding).Replace('+', '-').Replace('/', '_');

と:

static readonly char[] padding = { '=' };

逆にすると:

string incoming = returnValue
    .Replace('_', '/').Replace('-', '+');
switch(returnValue.Length % 4) {
    case 2: incoming += "=="; break;
    case 3: incoming += "="; break;
}
byte[] bytes = Convert.FromBase64String(incoming);
string originalText = Encoding.ASCII.GetString(bytes);

しかし、興味深い疑問は次の通りです。これは「共通コーデックライブラリ」が使用するアプローチと同じですか?これは確かに最初にテストするのに適した方法であり、かなり一般的なアプローチです。

おすすめ記事