[펌] UTF8 등, 한글 깨짐 관련.


From : http://kldp.org/node/79068

[완료] 자바에서 UTF-8, EUC-KR과 유니코드

안녕하세요.

자바에서 UTF-8 => 일반 유니코드 변환
EUC-KR => 일반 유니코드 변환

이런것들은 어떻게 해야 하나요...

일반 유니코드라는것을 자바에서 어떻게 받아들이고 있는지 모르겠네요...


...

유니코드 자체는 바이트의 개념이 아닙니다. 단순히 한 문자에 숫자 하나를 연결하는 개념이죠. 이것을 실제 바이트 단위로 저장하는 방식을 UTF-8, UTF-16 등으로 부르는 것입니다.

이중 UTF-8은 문자 하나당 저장되는 최소 단위가 8비트, 즉 1바이트입니다. UTF-16은 최소 단위가 2바이트이고요.그리고 과거에 UCS-2라는 것이 있었는데, 모든 문자를 2바이트 고정으로 저장합니다. 따라서 2바이트를 넘어가는 문자들은지원하지 못하는 방식으로 지금은 거의 사용되지 않는 방식이라고 생각하는 것이 좋습니다. (이것이 '유니코드는 2바이트다'는잘못된 소문의 원인이기도 합니다)

자바에서 지원이 어떻게 되는지는 자세히는 모르겠지만, String과 byte가 따로 구분되어 있고 String이 유니코드를 지원하는 것으로 알고 있습니다. http://www.jorendorff.com/articles/unicode/java.html 문서를 보면 유니코드 문자열과 byte[]간의 변환 방법이 나와 있네요.


윗분 말씀처럼,

윗분 말씀처럼, 유니코드는 문자 집합(character set)이고, UTF-8, UTF-16 같은 것들이 인코딩 방식입니다.


-----------------------
From : http://symlink.tistory.com/20

웹과 같은 환경에서 외부로 부터 전달받은 한글문자열이 EUC-KR인지 UTF-8인지 판단이 필요할때
사용될수 있는 소스 입니다.

해당 소스는 자동으로 LocalString으로 변경해 줍니다.

 public static String LocalString( String val)
 {
  if (val == null)
   return null;
  else {
   byte[] b;

   try {
    b = val.getBytes("8859_1");
    CharsetDecoder decoder = Charset.forName("UTF-8").newDecoder();
    try {
     CharBuffer r = decoder.decode( ByteBuffer.wrap( b));
     return r.toString();
    } catch (CharacterCodingException e) {
     return new String( b, "EUC-KR");
    }
   } catch (UnsupportedEncodingException e1) {
    e1.printStackTrace();
   }
  } return null;
 }



-----------------------
From : http://www.javaservice.net/~java/bbs/read.cgi?b=qna2&c=r_p&n=1123209037

제목 : 한글 코드 변환 euc-kr <-> utf-8
글쓴이: 손님(guest) 2005/08/05 11:30:37 조회수:756 줄수:21

안녕하십니까,

euc-kr 과 utf-8 간의 한글 코드를 매핑해서 변환하려면 어떻게야

할지 조언을 구합니다...

예를들어 '가' 라는 글자가 euc-kr 에서는 0xEEEE 를 가지고

utf-8 에서는 0xEFEFEF 를 가진다고 가정하면

euc-kr 에서 utf-8 로 변환할때,

String eucStr = "가"; // euc-kr String.
String utfStr = new String(eucStr.getBytes("euc-kr"), "utf-8");

처럼 하면 utfStr 에는 "EFEFEF" 가 들어가는지요...

위 처럼 해보니 변환되지 않는것 같은데 방법이 있으면 가르쳐 주십시오.

그럼, 좋은 하루 되십시오.
제목 : Re: 움...저같은경우엔..
글쓴이: 이규주(29zu) 2005/08/05 12:52:51 조회수:137 줄수:15

new OutputStreamWriter(new FileOutputStream(new File(tempFilePath,"tempRequest.txt")),"euc-kr");
utf-8->euc-kr로 변환하는방법으로 위의 방법을썼습니다..
파일로 euc-kr로 저장한다음 그것을 읽어들였죠...

그 반대도 이런식으로 이용할수 있을듯합니다...

파일에 안쓰고 분명 쓰는 방법도 있을텐데...
이거쓸당시 시간이 촉박해서 ...이렇게...^^; 지금이야..이미 잘돌아가는거
바꿀이유가 없어서..그렇구여...

정급하시면 이렇게 쓰시구여....

다른 방법 알아내셨다면 좀 알려주시길....

제목 : Re: 한글 코드 변환 euc-kr <-> utf-8
글쓴이: 이희승(anoripi) 2005/08/06 10:25:04 조회수:314 줄수:11

자바에서 문자열은 내부적으로 보두 UTF-16 으로 관리됩니다.  따라서 내부적으로 EUc-KR
로 저장하는 방법이나 UTF-8 으로 저장되는 방법이란 없습니다. 다면 우리가 액세스하는
인터페이스 (브라우저) 에 어떤 엔코딩으로 변환해서 출력할 지만 존재합니다.

str = "가"; 하셨다면 내부적으로는 한글 문자 '가' 에 해당하는 유니코드 char 값이
들어가 있게 되는 것입니다.

제목 : Re:Re: 한글 코드 변환 euc-kr <-> utf-8
글쓴이: 손님(guest) 2005/08/09 13:46:42 조회수:165 줄수:15

질문했던 사람인데요,

먼저 답변들 감사합니다.

utf-16 으로만 관리된다면, 데이터베이스에 ksc5601 로 저장되어 있는

한글을 쿼리로 가져와서 rs.getString(1) 등으로 String 에 넣으면

utf-16 으로 자동 전환된다는 말씀이신지 궁금합니다.

다시한번 답변 부탁드리며...


* 아 한글 처리는 왜이렇게 어려울까...ㅠ.ㅠ
제목 : Re: 한글 코드 변환 euc-kr <-> utf-8
글쓴이: 이희승(anoripi) 2005/08/10 06:56:56 조회수:195 줄수:13

답변이 늦었군요. ^^;;

네 맞습니다. rs.getString(1) 하면 드라이버가 네트워크를 통해 DBMS 와 통신하여
가져온 값을 UTF-16 으로 변환해 메모리에 저장합니다.

화면에 출력할 때에는 다시 컨테이너에 지정된 캐릭터셋으로 변환하여 스트림으로
내보내지게 되는 것이구요.

이 글과 관련있는 글을 자동검색한 결과입니다 [?]

by 오서비네 | 2008/05/12 21:00 | java | 트랙백

<< 이전 페이지     다음 페이지 >>