[프로그래밍] 한글파일 다운로드 구현.

Programming 2010.01.26 21:15
헉헉..
넘 짱난다 한글문제...ㅠ.ㅠ

하루이틀 격어보는것도 아니지만 매번 닥칠때마다 짜증난다.

이번엔 한글 다운로드가 문제!!

서버의 구성은 Apache + tomcat , utf-8 구성이다.

근데 젠장할 한글 아무리 해도 한글로 다운로드가 안되서 구글링!

최고의 포스팅을 발견!!

결국 해결....

원문 : http://kwon37xi.egloos.com/1819980

스크랩내용보기


저작자 표시 비영리 변경 금지
신고

한글이 깨져요~에 대한 [싸이월드]의 엄청난 답변!


저는 맥(Mac OSX)를 사용하고 있습니다.

맥을 가지고 싸이월드를 보는중에 일촌 맺기 창에서 상대방의 실명이 깨져 보이는 현상을 발견했습니다.
이에, 개발자로서 저런건 좀 고쳐야 겠지? 환경이 그나마 한국에선 특이한(?) 환경이다 보니 신경을 못썼겠다. 친절하게 알려주자~
싶어서 고객센터까지 찾아 들어가서 1:1문의로...

한글 인코딩 깨져요~

  맥 사용자구요.
파폭 쓰고 있구요.

일촌 맺었을때 일촌 실명이 한글이 깨집니다.
스샷 첨부합니다.

수고하셈~



요렇게 적었습니다...
뭐.. 좀 불친절하게 올리긴 했습니다만..ㅋ
스샷까지 첨부해서 보냈다는거!

그래서 돌아온 답변은..

안녕하세요. ***회원님싸이월드 헬프데스크입니다.


싸이월드를 이용해 주셔서 감사드리며

문의하신 미니홈피 이용 시 발생한 현상에 대해 답변드리겠습니다.

앞서 안내 드린 것과 같이 시도을 하였지만 문제가 해결되지 않을 경우,

익스플로러> [보기]> [인코딩]에서 "한국어"
변경 후 이용해 주시기 바랍니다
.



또한, 브라우저 업데이트 및 임시 인터넷 파일을 삭제한 후

다시 한 번 이용해 주시기 바랍니다.

 

1> 브라우저를 업데이트합니다.

1. 
브라우저를 → 이곳을 클릭하여 업데이트


2. 
윈도 보안설치를 → 이곳을 클릭하여 보안설치
     [업데이트 검색]을 하여 필수 설치되는 업데이트를 모두 실행.

2>
임시 인터넷 파일을 삭제합니다
.

>> 인터넷 창을 모두 닫고 새 창에서
1. 도구> 인터넷 옵션 클릭
2.
쿠키 삭제
3.
파일 삭제(오프라인 항목을 모두 삭제에 V 체크)
4. 
오른쪽의 설정 메뉴 클릭

5.
저장된 페이지의 새 버전 확인> [페이지를 열 때마다]로 수정
6. 
모든 창을 닫고 새 창에서 확인 


참고로 임시 인터넷 파일은 이전에 방문한 웹사이트의 정보를 컴퓨터에
저장하였다가 다음 방문 시에 로딩 속도를 줄이고자 사용됩니다.

임시 파일에 오류가 발생하면 새로 변경된 내용이 있어도
받아 놓은 정보만을 표시하기 때문에 회원님과 같은 상황이 발생할 수 있으니

해당 파일은 자주 삭제해 주시는 것이 좋습니다.

이와 같이 실행 후 새 창에서 다시 한 번 확인하시면
정상적으로 이용하실 수 있습니다.


위와 같이 설정한 후에도 해결되지 않는다면,

보내주신 문의내용만으로는 정확한 확인이 어려우니
아래의 내용을
기재하여 문의해 주시기 바랍니다.

-OS
종류

-
버전 (service pack 설치 여부)
-IE
버전


또한, OS를 확인하는 방법은 다음과 같습니다.

 

[내 컴퓨터 > 마우스 오른쪽 버튼 클릭 > 속성]

 

 

그리고 IE 버전을 확인하는 방법은 다음과 같습니다.

 

[Internet Explorer > 도움말 > Internet Explorer 정보]

 

 


보내드린 답변이 도움되셨길 바랍니다.


 

다른 궁금한 점이나 불편한 사항이 있으시면 헬프데스크로 문의 바랍니다.

고맙습니다.

사이좋은 사람들 싸이월드 www.cyworld.com


음....음.....
이봐요.... 저는 맥...유저라구요..ㅠㅠ;;
맥에서는 인터넷 익스프롤러가 없다규요..ㅠㅠ;;; 어헉;; 어쩌라규...ㅠㅠ;;

싸이월드 고객센터 여러분!
어려운 환경에서 힘들게 일하고 있는거 압니다~
그리고 컴퓨터 전문가가 아니라서 컴퓨터 쪽 대화에는 약하신것두 알구요.
하지만...
하지만......ㅠㅠ;

그래도 고객이 적은 문의 사항에서 제목만 보고 휙~ 답변하지 마시구요..
제발 내용도 좀 봐주세요.

그리고 설마 내용을 보고서 이렇게 답변을 보내셨다면...
제발 맥(Mac)하고, 윈도우즈(windows)정도는 구분할 수 있는 선지식을 갖춰 주세요.ㅠㅠ;;;
"배탈이 났어요~" 했는데 그위에 파스를 붙여 주심 어쩝니까.ㅠㅠ;;

이 포스트는 욕하는거 아닙니다.
부탁하는겁니다. 같은 웹 업계에서 종사하는 사람으로서...

저작자 표시 비영리 변경 금지
신고

[Flex]Encoding problem when using URLVariables

Programming/Flex 2009.04.02 00:35
URLVariables를 통해서 파라미터를 셋팅하고, navigateToURL이나 URLLoader를 통해서 한글 데이터를 전송하고자 할 때, 한글 파라미터 값이 깨지는 경우가 발생합니다.

Server side에서 갖가지 인코딩을 다 적용해 보았으나 죄다 실패!
Flex에서 URLRequest의 contextType을 죄다 변경해 보았으나 역시 실패!

그래서 결국 생각해낸 방법이 Base64를 이용하는 것입니다.-_-;;
근본적인 해결책은 아니더라도... 나쁘진 않은 방법이긴 하죠.-ㅅ-;

<test.mxml>
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
    <mx:Script>
          <![CDATA[
              import flash.net.navigateToURL;
              import mx.utils.Base64Decoder;
              import mx.utils.Base64Encoder;
              private function finishSubmit(event:Event):void
            {
               
                var request:URLRequest = new URLRequest("/test.jsp");
                var param:URLVariables = new URLVariables();
                var be:Base64Encoder = new Base64Encoder();
                var bd:Base64Decoder = new Base64Decoder();
                be.encodeUTFBytes(t.text);
                en.text = be.toString();
                bd.decode(en.text);
                de.text = bd.flush().toString();
               
                request.method = URLRequestMethod.POST;
                request.data = param;
                param.txt = en.text;
                param.undecodetxt = t.text;
                var ul:URLLoader = new URLLoader();
                ul.dataFormat = URLLoaderDataFormat.VARIABLES;
                ul.load(request); // test.jsp로 리퀘스트가 전송됩니다.
               
               
            }
          ]]>
      </mx:Script>

    <mx:Panel title="LineChart and AreaChart Controls Example"
        height="100%" width="100%" layout="absolute">
        <mx:Button x="61" y="105" label="Button" click="finishSubmit(event)"/>
        <mx:Label x="61" y="37" id="t" text="한글 텍스트...."/>
        <mx:TextArea x="50" y="201" width="267" height="196" id="en"/>
        <mx:TextArea x="352" y="189" width="382" height="197" id="de"/>
    </mx:Panel>

</mx:Application>


참으로 귀찮았나 봅니다.-_-;; 암튼 위 코드를 실행하면 아래와 같은 화면이 실행됩니다.
버튼을 누르면 한글 스트링을 encoding, decoding합니다.
그리고 test.jsp로 전송도 하구요.

<test.jsp>
<%@ page language="java" contentType="text/html; charset=euc-kr"
    pageEncoding="UTF-8"   %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String txt = request.getParameter("txt");
String undecodetxt = request.getParameter("undecodetxt");
System.out.println(undecodetxt);
System.out.println(txt);
System.out.println(Base64Coder.decodeString(txt));

%>
</body>
</html>

<Base64Coder.java : 출처 (http://www.source-code.biz/snippets/java/2.htm)>
/**
* A Base64 Encoder/Decoder.
*
* <p>
* This class is used to encode and decode data in Base64 format as described in RFC 1521.
*
* <p>
* This is "Open Source" software and released under the <a href="http://www.gnu.org/licenses/lgpl.html">GNU/LGPL</a> license.<br>
* It is provided "as is" without warranty of any kind.<br>
* Copyright 2003: Christian d'Heureuse, Inventec Informatik AG, Switzerland.<br>
* Home page: <a href="http://www.source-code.biz">www.source-code.biz</a><br>
*
* <p>
* Version history:<br>
* 2003-07-22 Christian d'Heureuse (chdh): Module created.<br>
* 2005-08-11 chdh: Lincense changed from GPL to LGPL.<br>
* 2006-11-21 chdh:<br>
* &nbsp; Method encode(String) renamed to encodeString(String).<br>
* &nbsp; Method decode(String) renamed to decodeString(String).<br>
* &nbsp; New method encode(byte[],int) added.<br>
* &nbsp; New method decode(String) added.<br>
*/

public class Base64Coder {

// Mapping table from 6-bit nibbles to Base64 characters.
private static char[] map1 = new char[64];
static {
int i=0;
for (char c='A'; c<='Z'; c++) map1[i++] = c;
for (char c='a'; c<='z'; c++) map1[i++] = c;
for (char c='0'; c<='9'; c++) map1[i++] = c;
map1[i++] = '+'; map1[i++] = '/'; }

// Mapping table from Base64 characters to 6-bit nibbles.
private static byte[] map2 = new byte[128];
static {
for (int i=0; i<map2.length; i++) map2[i] = -1;
for (int i=0; i<64; i++) map2[map1[i]] = (byte)i; }

/**
* Encodes a string into Base64 format.
* No blanks or line breaks are inserted.
* @param s a String to be encoded.
* @return A String with the Base64 encoded data.
*/
public static String encodeString (String s) {
return new String(encode(s.getBytes())); }

/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted.
* @param in an array containing the data bytes to be encoded.
* @return A character array with the Base64 encoded data.
*/
public static char[] encode (byte[] in) {
return encode(in,in.length); }

/**
* Encodes a byte array into Base64 format.
* No blanks or line breaks are inserted.
* @param in an array containing the data bytes to be encoded.
* @param iLen number of bytes to process in <code>in</code>.
* @return A character array with the Base64 encoded data.
*/
public static char[] encode (byte[] in, int iLen) {
int oDataLen = (iLen*4+2)/3; // output length without padding
int oLen = ((iLen+2)/3)*4; // output length including padding
char[] out = new char[oLen];
int ip = 0;
int op = 0;
while (ip < iLen) {
int i0 = in[ip++] & 0xff;
int i1 = ip < iLen ? in[ip++] & 0xff : 0;
int i2 = ip < iLen ? in[ip++] & 0xff : 0;
int o0 = i0 >>> 2;
int o1 = ((i0 & 3) << 4) | (i1 >>> 4);
int o2 = ((i1 & 0xf) << 2) | (i2 >>> 6);
int o3 = i2 & 0x3F;
out[op++] = map1[o0];
out[op++] = map1[o1];
out[op] = op < oDataLen ? map1[o2] : '='; op++;
out[op] = op < oDataLen ? map1[o3] : '='; op++; }
return out; }

/**
* Decodes a string from Base64 format.
* @param s a Base64 String to be decoded.
* @return A String containing the decoded data.
* @throws IllegalArgumentException if the input is not valid Base64 encoded data.
*/
public static String decodeString (String s) {
return new String(decode(s)); }

/**
* Decodes a byte array from Base64 format.
* @param s a Base64 String to be decoded.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException if the input is not valid Base64 encoded data.
*/
public static byte[] decode (String s) {
return decode(s.toCharArray()); }

/**
* Decodes a byte array from Base64 format.
* No blanks or line breaks are allowed within the Base64 encoded data.
* @param in a character array containing the Base64 encoded data.
* @return An array containing the decoded data bytes.
* @throws IllegalArgumentException if the input is not valid Base64 encoded data.
*/
public static byte[] decode (char[] in) {
int iLen = in.length;
if (iLen%4 != 0) throw new IllegalArgumentException ("Length of Base64 encoded input string is not a multiple of 4.");
while (iLen > 0 && in[iLen-1] == '=') iLen--;
int oLen = (iLen*3) / 4;
byte[] out = new byte[oLen];
int ip = 0;
int op = 0;
while (ip < iLen) {
int i0 = in[ip++];
int i1 = in[ip++];
int i2 = ip < iLen ? in[ip++] : 'A';
int i3 = ip < iLen ? in[ip++] : 'A';
if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127)
throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
int b0 = map2[i0];
int b1 = map2[i1];
int b2 = map2[i2];
int b3 = map2[i3];
if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0)
throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
int o0 = ( b0 <<2) | (b1>>>4);
int o1 = ((b1 & 0xf)<<4) | (b2>>>2);
int o2 = ((b2 & 3)<<6) | b3;
out[op++] = (byte)o0;
if (op<oLen) out[op++] = (byte)o1;
if (op<oLen) out[op++] = (byte)o2; }
return out; }

// Dummy constructor.
private Base64Coder() {}

} // end class Base64Coder

<결과 System.out>
한글 텍스트....
7ZWc6riAIO2FjeyKpO2KuC4uLi4=
한글 텍스트....

<Http Request Header에 찍히는 Parameter 정보>
txt=7ZWc6riAIO2FjeyKpO2KuC4uLi4%3D&undecodetxt=%ED%95%9C%EA%B8%80%20%ED%85%8D%EC%8A%A4%ED%8A%B8%2E%2E%2E%2E

네~ 됩니다.

플렉스는 아직 한글을 싫어라 합니다. 젠장.-ㅅ-;;

혹시나 서버사이드에서 인코딩 쉽사리 전송된 사례가 있다면 공유 부탁드립니다.(__)*


저작자 표시 비영리 변경 금지
신고


티스토리 툴바