문자열을 바이트 어레이로 변환하기위한 적절한 인코딩은 무엇입니까?
-
11-07-2019 - |
문제
파일을 업로드하는 asp.net httphandler에서 인코딩하는 데 어떤 종류의 문제가 있습니다. 파일 컨텐츠는 "Tobase64"라는 것을 사용하는 ColdFusion 웹 페이지에서 숨겨진 양식 변수로 전달됩니다.
ColdFusion에서 파일 내용을 양식에 배치하는 데 사용되는 코드는 다음과 같습니다.
<cffile action="readBinary" file="#FileName#" variable="objBinaryData">
<cfset b64file = #toBase64(objBinaryData)#>
<form name="sendToHandler"
action="http://myserver/mysite/UploadHandler.ashx" method="post">
<cfoutput>
<input type="hidden" name="objBinaryData" value="#b64file#" />
업로드 핸들러가 게시되면 다음과 같이 양식에서 문자열을 얻습니다.
string fileContent = context.Request.Form["objBinaryData"];
다음으로 문자열을 다음과 같이 바이트 배열로 변환하고 있습니다.
byte[] binData = StringToByteArray(fileContent, EncodingType.ASCII);
문자열을 변환하는 데 사용하는 기능은 다음과 같습니다.
public static byte[] StringToByteArray(string str, EncodingType encodingType)
{
System.Text.Encoding encoding = null;
switch (encodingType)
{
case EncodingType.ASCII:
encoding = new System.Text.ASCIIEncoding();
break;
case EncodingType.Unicode:
encoding = new System.Text.UnicodeEncoding();
break;
case EncodingType.UTF7:
encoding = new System.Text.UTF7Encoding();
break;
case EncodingType.UTF8:
encoding = new System.Text.UTF8Encoding();
break;
}
return encoding.GetBytes(str);
}
public enum EncodingType
{
ASCII,
Unicode,
UTF7,
UTF8
}
encodingtype.ascii로 위의 기능을 호출하는 것은 분명하지만, 나는 올바른 것이 무엇인지 매우 혼란 스럽습니까? ColdFusion에서 전송 된 "Base64"사이의 적절한 "매치"와 문자열이 .NET에서 인코딩되어야하는 방식은 무엇입니까?
모든 코드가 "작동"하지만 파일의 후속 검색은이를 스크램블링하는 것으로 나타 났으며 여기에 잘못된 인코딩이 있다고 확신합니다.
up-update 편집 :
이전에 생략 된 열거 코드를 추가했습니다. 이러한 모든 인코딩 유형을 시도했습니다. 그들은 모두 "쓰레기"를 초래합니다. 즉, 나는 다음과 같은 각 변형을 시도했습니다.
byte[] binData = StringToByteArray(fileContent, EncodingType.ASCII);
byte[] binData = StringToByteArray(fileContent, EncodingType.Unicode);
byte[] binData = StringToByteArray(fileContent, EncodingType.UTF7);
byte[] binData = StringToByteArray(fileContent, EncodingType.UTF8);
이 중 어느 것도 제대로 작동하지 않습니다. 제안 된 기능을 읽으면서 유니 코드 여야합니다. 변환 된 문자열이 아닌 바이트 배열을 반환하고 싶습니다. 여전히 매우 혼란 스러워요.
대답:
나는 단순히 열거와 내가 쓴 기능을 StringTobytearRay라고 불렀습니다. 대신 나는 다음을 코딩했다.
byte[] binData = Convert.FromBase64String(fileContent);
해결책
를보세요 Convert.FromBase64String()
기능
다른 팁
Base64는 이진 데이터를 일련의 ASCII 문자로 표현하여 원시 바이너리 데이터를 허용 할 수없는 텍스트 파일 및 전자 메일 메시지에 포함시킬 수있는 인코딩 체계입니다. 아래 예제는 유니 코드 스트링의 인코딩 및 디코딩을 보여줍니다. 이것이 당신이 원했던 것이면 알려주십시오.
//Encoding
public static string StringToBase64 (string src) {
// Get's byte representation unicode string
byte[] b = Encoding.Unicode.GetBytes(src);
// Returns Base64-encoded string
return Convert.ToBase64String(b);
}
//Decoding
public static string Base64ToString (string src) {
// Decodes Base64-encoded string to a byte array
byte[] b = Convert.FromBase64String(src);
// Returns decoded Unicode string
return Encoding.Unicode.GetString(b);
}