문제

파일을 업로드하는 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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top