C#でBase64エンコード

Base64の=はパディングだったことを知りました。

まったく意識していなかったのですが、WebAPIなどではパディングなしが求められることもあります。 無意識にBase64エンコードするとパディングありの結果が出力されていることもあるので、少し注意が必要です。

C#でno paddingなBase64エンコードしたい場合は以下でできました。

string input = "....";
var base64encoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(input)).TrimEnd('=');

TrimEndは末尾の文字が連続してもぜんぶ両方Trimしてくれるので、これでno paddingにできます。

今回、inputはマルチバイトではない文字を想定していたので、UTF8エンコードでバイト列に変換しましたが、 マルチバイト文字の場合は正しいエンコードを選択する必要がありそうです。

C#のstringの文字コードってどこで決まるんでしょうか。。。