将.net String对象转换为base64编码的字符串

时间:2010-04-13 18:39:22

标签: .net string encoding base64

我有一个问题,在将.NET字符串编码为base64时要使用哪种Unicode编码?我知道字符串在Windows上是UTF-16编码的,所以我的编码方式是正确的吗?

public static String ToBase64String(this String source) {
        return Convert.ToBase64String(Encoding.Unicode.GetBytes(source));
    }

4 个答案:

答案 0 :(得分:26)

您提供的内容非常实用。它将生成以UTF-16编码的源字符串字节的base64编码字符串。

如果您询问UTF-16是否可以表示字符串中的任何字符,那么是。 UTF-16和UTF-32之间的唯一区别是UTF-16是可变长度编码;它使用两个字节来表示子集中的字符,使用四个字节来表示所有其他字符。

没有UTF-16无法表示的unicode字符。

答案 1 :(得分:3)

请注意,

创建该字节数组时,您可以自由选择任何能够处理字符串中所有字符的编码。例如,如果文本是基于拉丁语的语言,UTF-8会更有效,但它仍然可以处理每个已知字符。

最重要的问题是,无论软件解码base64字符串,都需要知道应用于字节数组的编码以重新创建原始字符串。

答案 2 :(得分:3)

这是解决方案,我已经转换了一个随机字符串转换,就像你可以输出任何大小为10的Base64将输出。

//This function will return a random string from the given numeric characters
public string RandomString(int size)
{
const string legalCharacters = "1234567890";
Random random = new Random();
StringBuilder builder = new StringBuilder();
char ch = '\0';

for (int i = 0; i <= size - 1; i++) {
    ch = legalCharacters(random.Next(0, legalCharacters.Length));
    builder.Append(ch);
}
return builder.ToString();
}
public const string BASE64 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
public string DecToBase64(long lVal)
{
string sVal = null;
sVal = "";
while (lVal >= 64) {
    sVal = sVal + DecToBase64(lVal / 64);
    lVal = lVal - 64 * (lVal / 64);
}
sVal = sVal + Strings.Mid(BASE64, Convert.ToInt32(lVal) + 1, 1);
return sVal;
}

//here is how we can have result in variable:
string Base64 = "";
Base64 = DecToBase64(RandomString(10)); //this will produce a combination up-to length of 10

答案 3 :(得分:2)

MSDN确认UnicodeEncoding类代表Unicode字符的UTF-16编码。