我有一個問題,將.NET字符串編碼爲base64時使用哪種Unicode編碼?我知道Windows上的字符串是UTF-16編碼,所以我的編碼方式是正確的嗎?將.net字符串對象轉換爲base64編碼字符串
public static String ToBase64String(this String source) {
return Convert.ToBase64String(Encoding.Unicode.GetBytes(source));
}
我有一個問題,將.NET字符串編碼爲base64時使用哪種Unicode編碼?我知道Windows上的字符串是UTF-16編碼,所以我的編碼方式是正確的嗎?將.net字符串對象轉換爲base64編碼字符串
public static String ToBase64String(this String source) {
return Convert.ToBase64String(Encoding.Unicode.GetBytes(source));
}
你提供的是完美的功能。它將產生以UTF-16編碼的源字符串字節的base64編碼字符串。
如果你問UTF-16是否可以表示字符串中的任何字符,那麼是的。 UTF-16和UTF-32唯一的區別在於UTF-16是一種可變長度編碼;它使用兩個字節來表示子集內的字符,其他字符使用四個字節。
沒有Unicode字符不能用UTF-16表示。
MSDN確認UnicodeEncoding
類表示編碼爲Unicode字符的UTF-16
。
如果我的字符串不僅包含英文字母和小數位,它還能正常工作嗎? – chester89 2010-04-13 18:45:20
@ chester89:這是Unicode的! – abatishchev 2010-04-13 19:12:06
請注意,您不要有使用UTF-16,因爲這正是.NET字符串所使用的。當你創建該字節數組時,你可以自由選擇任何編碼來處理字符串中的所有字符。例如,如果文本是基於拉丁文的語言,UTF-8會更有效,但它仍然可以處理每個已知字符。
最重要的問題是,無論軟件解碼base64字符串,都需要知道將哪種編碼應用於字節數組以重新創建原始字符串。
這裏是解決方案,我已經轉換了一個隨機字符串轉換,就像您可以給任何大小,最多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 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
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
*「沒有unicode字符不能用UTF-16表示。」*實際上是通過任何其他轉換(UTF)。 – 2014-12-30 11:39:50