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

35

我有一个问题,当将.NET字符串编码为base64时应该使用哪种Unicode编码?我知道在Windows上,字符串是UTF-16编码的,那么我的编码方式是否正确?

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

28
你提供的代码是完全可用的。它将产生源字符串字节的base64编码,该字符串使用UTF-16进行编码。
如果你问UTF-16是否能够表示字符串中的所有字符,那么答案是肯定的。 UTF-16和UTF-32之间的唯一区别在于UTF-16是一种可变长度编码;它使用两个字节来表示字符集中的字符,并使用四个字节表示其他所有字符。
没有任何Unicode字符无法用UTF-16表示。

2
没有任何Unicode字符无法用UTF-16或其他转换格式表示。 - T.J. Crowder

3

这是解决方案,我已经将随机字符串转换为Base64编码。您可以指定任何不超过10的大小。

//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
请注意,您不必使用UTF-16只是因为.NET字符串使用它。当您创建该字节数组时,您可以自由选择任何一种编码方式来处理字符串中的所有字符。例如,如果文本是基于拉丁语系的语言,则UTF-8会更有效,但它仍然可以处理每个已知的字符。
最重要的问题是无论哪个软件解码base64字符串,都需要知道应用于字节数组以重新创建原始字符串的编码方式。

2

MSDN证实,UnicodeEncoding类表示Unicode字符的UTF-16编码。


如果我的字符串中不仅包含英文字母和十进制数字,它还能正常工作吗? - chester89

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接