我正在尝试编写一个将字符串转换为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)? 谢谢!
答案 0 :(得分:57)
您可以使用:
从byte []到string:
byte[] array = somebytearray;
string result = Convert.ToBase64String(array);
从字符串到字节[]:
array = Convert.FromBase64String(result);
答案 1 :(得分:20)
看起来没问题,虽然方法很奇怪。但是使用Encoding.ASCII.GetBytes()将base64字符串转换为byte []。 Base64编码仅包含ASCII字符。使用Unicode会为每个字符增加一个0字节。
答案 2 :(得分:2)
将字符串表示为表示为字符串的blob是奇怪的...任何原因你不能直接使用字符串?
字符串始终 unicode;它是改变的编码字节。由于base-64始终<128,因此在 last 部分中使用unicode似乎有点过分(除非这是线路格式要求的)。就个人而言,我会在最后GetBytes
使用UTF8或ASCII,这样每个base-64字符只占用一个字节。
答案 3 :(得分:0)
.NET中的所有字符串都是unicode。此代码将生成有效结果,但BASE64字符串的使用者也应启用unicode。
答案 4 :(得分:0)
是的,它会输出源字符串的UTF-16 little-endian表示的base64编码字符串。请记住,AFAIK,通常使用base64,ASCII或UTF-8中使用UTF-16并不常见。但是,重要的是发送方和接收方同意必须使用哪种编码。
我不明白为什么要在字节数组中重新转换base64字符串:base64用于避免在传输时编码不兼容性,因此您应该保留为字符串并以您使用的协议所需的格式输出传输数据。而且,正如Marc所说,将UTF-16用于此目的绝对有点过头了,因为base64只包含64个字符,全部都在128以下。