2010-04-13 9 views
29

.NET 문자열을 base64로 인코딩하는 동안 사용할 유니 코드 인코딩은 무엇입니까? 문자열이 Windows에서 인코딩 된 UTF-16임을 알고 있으므로 내 인코딩 방식이 올바른 것입니까?.net String 객체를 base64 인코딩 된 문자열로 변환

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

답변

23

제공하신 것은 완벽하게 작동합니다. UTF-16으로 인코딩 된 소스 문자열의 바이트 수를 base64로 인코딩 한 문자열을 생성합니다.

UTF-16이 문자열의 문자를 나타낼 수 있는지 묻는 경우 예. UTF-16과 UTF-32의 유일한 차이점은 UTF-16이 가변 길이 인코딩이라는 점입니다. 부분 집합 내의 문자를 나타내는 데 2 ​​바이트를 사용하고 다른 모든 문자에는 4 바이트를 사용합니다.

UTF-16으로 표현할 수없는 유니 코드 문자는 없습니다.

+2

* "UTF-16으로 표현할 수없는 유니 코드 문자는 없습니다."* 실제로는 다른 변환 (UTF)도 마찬가지입니다. –

2

MSDNUnicodeEncoding 클래스가 유니 코드 문자 인코딩 UTF-16임을 나타냅니다.

+0

내 문자열에 영문자와 십진수가있을뿐 아니라 제대로 작동합니까? – chester89

+2

@ chester89 : 유니 코드는 무엇입니까! – abatishchev

3

이 없으므로 .NET 문자열에서 사용하는 UTF-16을 사용해야합니다. 해당 바이트 배열을 만들 때 문자열의 모든 문자를 처리 할 인코딩을 자유롭게 선택할 수 있습니다. 예를 들어, 텍스트가 라틴어 기반 언어 인 경우 UTF-8이 더 효율적이지만 모든 알려진 문자를 처리 할 수 ​​있습니다.

가장 중요한 관심사는 base64 문자열을 디코딩하는 소프트웨어가 무엇이든지 원래 문자열을 다시 만들려면 바이트 배열에 적용 할 인코딩을 알아야한다는 것입니다.

4

여기 해결책입니다. 저는 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 = "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