文字列をbase64バイト配列に変換する関数を作成しようとしています。私はこのアプローチで試しました:
public byte[] stringToBase64ByteArray(String input)
{
byte[] ret = System.Text.Encoding.Unicode.GetBytes(input);
string s = Convert.ToBase64String(input);
ret = System.Text.Encoding.Unicode.GetBytes(s);
return ret;
}
この関数は有効な結果を生成しますか(文字列がUnicodeである場合)?ありがとう!
アプローチは奇妙ですが、大丈夫に見えます。ただし、Encoding.ASCII.GetBytes()を使用して、base64文字列をbyte []に変換します。 Base64エンコードにはASCII文字のみが含まれます。Unicodeを使用すると、各文字に余分な0バイトが追加されます。
次を使用できます。
byte []から文字列へ:
_byte[] array = somebytearray;
_
string result = Convert.ToBase64String(array);
stringからbyte []:へ
array = Convert.FromBase64String(result);
文字列を文字列として表されるblobとして表すのは奇妙です...文字列を直接使用できない理由は何ですか?
文字列はalways unicode;です。変更されるのはエンコードされたバイトです。 base-64は常に<128であるため、last部分でunicodeを使用するのはやり過ぎのようです(ただし、wire-formatが要求するものでない限り)。個人的には、最後のGetBytes
にUTF8またはASCIIを使用するので、各base-64文字は1バイトだけを取ります。
.NETのすべての文字列はUnicodeです。このコードは有効な結果を生成しますが、BASE64文字列のコンシューマーもUnicode対応である必要があります。
はい、ソース文字列のUTF-16リトルエンディアン表現のbase64エンコード文字列を出力します。私の知る限り、base64でUTF-16を使用することはあまり一般的ではないことに注意してください。ASCIIまたはUTF-8が通常使用されます。ただし、ここで重要なのは送信者と受信者どのエンコーディングを使用する必要があるかについて合意します。
バイト配列のbase64文字列を再変換する理由がわかりません:送信時のエンコードの非互換性を回避するためにbase64が使用されます。 。また、Marcが言ったように、base64には128文字以下の64文字しか含まれていないため、その目的でUTF-16を使用するのは間違いなくやり過ぎです。