마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

volley 로 파일과 스트링을 multipart로 서버에 전송할때 한글깨짐 현상

0 추천

https://gist.github.com/anggadarkprince/a7c536da091f4b26bb4abf2f92926594

 

위 예제대로 진행해봤는데요

 

            @Override
            protected Map<String, String> getParams() {
                Map<String, String> params = new HashMap<>();
                params.put("api_token", "gh659gjhvdyudo973823tt9gvjf7i6ric75r76");
                params.put("name", mNameInput.getText().toString());
                params.put("location", mLocationInput.getText().toString());
                params.put("about", mAvatarInput.getText().toString());
                params.put("contact", mContactInput.getText().toString());
                return params;
            }

            @Override
            protected Map<String, DataPart> getByteData() {
                Map<String, DataPart> params = new HashMap<>();
                // file name could found file base or direct access from real path
                // for now just get bitmap data from ImageView
                params.put("avatar", new DataPart("file_avatar.jpg", AppHelper.getFileDataFromDrawable(getBaseContext(), mAvatarImage.getDrawable()), "image/jpeg"));
                params.put("cover", new DataPart("file_cover.jpg", AppHelper.getFileDataFromDrawable(getBaseContext(), mCoverImage.getDrawable()), "image/jpeg"));

                return params;
            }

 

위쪽 String 보내는쪽에서 한글이 들어가면 서버에서 한글이 깨져 들어가네요,

(아이폰쪽은 한글로 잘 들어온다 하니 서버문제는 아닌듯합니다..)

 

    private void buildTextPart(DataOutputStream dataOutputStream, String parameterName, String parameterValue) throws IOException {
        dataOutputStream.writeBytes(twoHyphens + boundary + lineEnd);
        dataOutputStream.writeBytes("Content-Disposition: form-data; name=\"" + parameterName + "\"" + lineEnd);
        //dataOutputStream.writeBytes("Content-Type: text/plain; charset=UTF-8" + lineEnd);
        dataOutputStream.writeBytes(lineEnd);
        dataOutputStream.writeBytes(parameterValue + lineEnd);
    }

 

이부분에서 저 주석처리된 라인 주석을 풀어보는게 해법인줄 알았는데 안되네요,,

 

volley utf-8 로 구글링해봐도 해법이 잘 안보이네요

 

참고로 multipart가 아니라 스트링만 보내는때에는 한글이 잘 들어갑니다.

근데 파일과 함께 multipart로만 하면 한글이 깨지네요,,

작은 힌트라도 부탁드립니다..ㅠ

파르네제 (2,030 포인트) 님이 2018년 6월 17일 질문

1개의 답변

0 추천
 
채택된 답변
저 예제의 문제 같네요

dataOutputStream.writeBytes(parameterValue + lineEnd);

일단 이 부분에 문제가 있습니다. writeBytes에다가 그냥 String을 그대로 집어넣으면 한글 같은 경우 글자가 날라갑니다.

dataOutputStream.write(parameterValue.getBytes("utf-8"));
dataOutputStream.writeBytes(lineEnd);

이렇게 하면 UTF-8로 제대로 들어간다고 댓글에 달려 있네요.
회색 (21,000 포인트) 님이 2018년 6월 18일 답변
파르네제님이 2018년 6월 18일 채택됨
답변 감사합니다,
수정하고 보내보니 서버에서 한글은 ???? 이렇게 물음표로만 뜨네요..ㅠ
아 예제코드상에 주석처리된 줄을 그대로 주석으로 놔두고 하니 되네요
덕분에 잘 해결했습니다 감사합니다!
...