달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'Charset'에 해당되는 글 4건

  1. 2013.09.30 Response 구간 정리
  2. 2013.09.30 JSP,Servlet에서 한글 문제를 피하려면..
  3. 2013.09.30 문자셋과 인코딩
  4. 2013.09.30 Character-Set & Encoding이란?

Response객체는 브라우저에 전달되는 HTML 결과 생성할 때 사용된다. Response객체의 Encoding CharterSet에 따라서 브라우저에서 출력되는 한글이 깨져보일수 있으므로 주위를 해야 한다. 하지만 걱정할 필요는 없다.
아래 제시되는 3가지 방법중 한 가지만 제대로 해도 한글 출력에 문제가 없다.
 

q
Response Charset에 따라서 출력되는 HTML Bodycharset에 영향을 미치게 된다.
qCharter set을 명시적으로 지정하라.
¤대략 3가지 방법으로 설정 가능하며 같은 효과가 있다.
1.Page 설정 통해서 설정
¡<%@ page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8" %>
¡pageEncoding 생략시 charset에 따라서 Page Encoding
2.함수 호출 1
Response.setCharacterEncoding(“UTF-8”);
Response.setContentType("text/html");
3.함수 호출 2
Response.setContentType("text/html;charset=UTF-8");
¤방법 1,2,3 중복해서 호출될 경우, 마지막 호출된 값이 유효하다.
¤하지만 PrintWriter pw = response.getWriter(); 함수 호출 이후에는 setCharacterEncoding(), setContentType() 함수가 호출되어도 무시된다.  
q명시적으로 Charset을 설정하지 않았다면 아래 단계로 디폴트 값 설정 됨
1.HTTP RequestContent-Language 참조
2.<locale-encoding-mapping-list> 정보를 web.xml에서 찾는다.
3.ISO-8859-1 을 사용한다.

qSRV.5.4 Response data Encoding ( servlet-2_5-mrel2-spec.pdf 에서 발췌 )

Servlets should set the locale and the character encoding of a response. The locale is set using the ServletResponse.setLocale method. The method can be called repeatedly; but calls made after the response is committed have no effect. If the servlet does not set the locale before the page is committed, the container’s default locale is used to determine the response’s locale, but no specification is made for the communication with a client, such as Content-Language header in the case of HTTP.

<locale-encoding-mapping-list>

<locale-encoding-mapping>

<locale>ja</locale>

<encoding>Shift_JIS</encoding>

</locale-encoding-mapping>

</locale-encoding-mapping-list>

If the element does not exist or does not provide a mapping, setLocale uses a container dependent mapping. The setCharacterEncoding, setContentType, and setLocale methods can be called repeatedly to change the character encoding.

Calls made after the servlet response’s getWriter method has been called or after the response is committed have no effect on the character encoding. Calls to setContentType set the character encoding only if the given content type string

provides a value for the charset attribute. Calls to setLocale set the character encoding only if neither setCharacterEncoding nor setContentType has set the character encoding before.

If the servlet does not specify a character encoding before the getWriter method of the ServletResponse interface is called or the response is committed, the default ISO-8859-1 is used.

Containers must communicate the locale and the character encoding used for the servlet response’s writer to the client if the protocol in use provides a way for doing so. In the case of HTTP, the locale is communicated via the Content-Language header, the character encoding as part of the Content-Type header for text media types. Note that the character encoding cannot be communicated via

HTTP headers if the servlet does not specify a content type; however, it is still

used to encode text written via the servlet response’s writer.

'그외 주제들 > 한글처리' 카테고리의 다른 글

다양한 환경에서의 언어 설정  (0) 2013.09.30
자바에서 String 처리  (0) 2013.09.30
Request 구간 정리  (0) 2013.09.30
JSP,Servlet에서 한글 문제를 피하려면..  (0) 2013.09.30
Unicode ( 유니코드 )  (0) 2013.09.30
Posted by 행복한삶~!!
|

한글 처리에 영향을 주는 곳

10여군대 이상의 곳에서 Encoding 관련 정보들이 있고, 한글 처리에 영향을 미칠수 있다. 
client 부터 WAS까지, WAS에서 DB 및 외부 I/O처리, 다시 WAS에서 Client까지 전 구간을 완벽하게 이해하는것은 어려운 일일수 있지만 몇가지만 정확하게 알고 있으면 한글 깨지는 문제는 피 할수 있다.
특별히 빨간색으로 표기된 부분의 환경설정이 중요하다.

한글 문제를 피하려면?

q몇 가지 환경설정만 잘하면된다.
¤전체 브라우징 과정을 살펴보면 많은 과정을 거치면서 10여군대 이상의 encoding관련 설정에 영향을 받는다. 모든 과정을 완벽히 이해하는것은 힘들지만 몇 가지 환경설정 및 핵심 구간의 동작을 이해하면 한글 문제를 할 수 있다.
¤필수 환경 설정
¤WAS JVM 설정
¤HTML Meta Tag
¤JSP 페이 설정
¤Servlet Response/Request 설정
¤DB 언어 설정
¤3가지 구간의 세부 동작을 이해하자!
¤브라우저부터 Request 객체까지
¡Static Page 호출 Form 데이터 수신 과정 이해
¤Java 언어에서의 Encoding 이해 및 외부 I/OEncoding 이해
¤Response 객체에서 Encoding 이해
q언어 처리는 크게 2가지 상황이 있다.
¤한글과 영어만 제대로 나오면 되는 경우 ( 다국어 처리를 고려하지 않음 )
¤한국어,중국어,일본어, 힌두어 등 다국어를 동시에 처리해야 하는 경우.

    한글과 영어만 고려한 환경설정 ( 다국어 처리를 고려하지 않음 )

qWAS JVM 설정
¤file.encoding=ms949, client.encoding.override=ms949
qHTML Meta Tag설정
¤<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
qJSP 페이지 설정
¤<%@ page pageEncoding=“ms949contentType="text/html;charset=ms949" %>
pageEncoding 생략시 charset 값으로 pageEncoding )
qServlet Response/Request 설정
¤HTTP 요청의 인코딩 지정 ( client.encoding.override가 정의되어 있다면 생략해도 됨 )
¤request.setCharacterEncoding(“ms949”);
¤HTTP 응답의 인코딩 지정
¤response.setContentType("text/html; charset=ms949"); or
response.setCharacterEncoding(“ms949");
q빨간색으로 표기된 ms949대신 euc-kr을 사용하면 euc-kr의 문제인 현대한글 중 2350자만 표현 가능한 문제가 발생한다. (,펲등의 한글이 깨짐) 그래서 euc-kr 대신 ms949를 사용하는것이 바람직하다. 
ms949가 비록 ms에서 만든 환영받지못한 Charter Set이지만, 오라클 DB, JAVA, 많은 WAS에서 대부분 지원하고 있는 표준의 역할을 하고 있다. ( 물론 unicode를 사용하지 않는 경우에 한해겠지만.. )
¤오라클도 ms949를 지원하므로 ms949 로 설정해야 현대한글이 모두 표현된다.
¤Html의 경우 charset=euc-kr로 을 줘도 브라우저에서 현대한글이 정상적으로 출력된다.
 
    다국어를 지원해야 하는 경우의 환경설정
q하나의 페이지에서 다국어를 입력,출력해야 한다면 모든 설정을 UTF-8로 통일시켜야 한다.
qWAS JVM 설정
¤file.encoding=UTF-8, client.encoding.override=UTF-8
qHTML 설정
¤<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
qJSP 페이지
¤<%@ page pageEncoding=“UTF-8" %> ( 생략가능, 생략시 charset 값으로 pageEncoding )
¤<%@ page contentType="text/html;charset=UTF-8" %>
qServlet 설정
¤HTTP 요청의 인코딩 지정
¤request.setCharacterEncoding(“UTF-8”);
¤HTTP 응답의 인코딩 지정
¤response.setContentType("text/html; charset=UTF-8"); or
response.setCharacterEncoding(“UTF-8");
qDBMS
¤DBMS 설정값도 UTF-8로 설정해야 한다

'그외 주제들 > 한글처리' 카테고리의 다른 글

Response 구간 정리  (0) 2013.09.30
Request 구간 정리  (0) 2013.09.30
Unicode ( 유니코드 )  (0) 2013.09.30
문자셋과 인코딩  (0) 2013.09.30
Character-Set & Encoding이란?  (0) 2013.09.30
Posted by 행복한삶~!!
|
영어권 문자셋과 인코딩
qASCII
¤1967년에 미국에서 제정됨 (1986년에 마지막 개정)
¤ASCII0x00부터 0x7F까지의 총 127개 문자(제어 문자, 특수 문자, 숫자, 알파벳 등)로 이루어져 있다.
qISO-8859
¤ASCII는 미국에서 제정된 표준이니 영어 알파벳을 표현하기에는 큰 문제가 없었겠지만, ß(독일어), ñ(에스파냐어), å(스웨덴어와 북유럽 언어)와 같은 문자를 표현할 수 없어 유럽어에는 사용할 수 없었다.
¤이러한 문제를 해결하기 위해 확장 ASCII(Extended ASCII)를 제정하여 기존의 ASCII로 정의하지 못했던 128번부터 255번까지의 새로운 문자를 정의할 수 있게 되었다. , 새로 추가된 128개의 코드(0x80 ~ 0xFF)로 프랑스어, 독일어 등의 유럽어를 표현할 수 있게 된 것이다. 이와 같이 다양한 유럽어를 표현할 수 있는 확장 ASCIIISO-8859 유럽 통일 표준안으로 제정되었다.
¤ISO 8859-1은 서유럽 언어를, ISO 8859-2는 동유럽 언어를 위한 표준이며
ISO 8859-16
까지 다양한 버전이 있음.
q참고자료

      한글 문자셋과 인코딩
q80년대부터 한글을 처리하기 위한 다양한 방법들이 발전해 왔음
q현재는 KSC5601, EUC-KR, MS949, UNICODE 정도만 사용됨
qKSC5601 (정식명칭 : KS X 1001 )
¤1987년에 표준안 채택, 대표적인 한글완성형 코드
¤0xA1A1부터 0xFEFE까지의 영역(94x94, 8,836글자할당)
¤한글 2,350, 한자 4,888
¤부호 외국문자(일본, 러시아, 그리스어등)1,598
¤,,, 등 많은 현대 한글을 표현하지 못하는 문제가 있다.
¤1992년에 이러한 문제를 해결하기 위해서 조합형을 지원하게 개정되었으나 거의 사용되지 않는다.
qEUC-KR
¤KS X 1001 KS X 1003 규격으로 구성됨
¤128보다 작은 바이트에 KS X 1003을 배당한다.
¡영문 및 특수문자 지원 ( ASCII 표준에서 역슬래시(0x5C) 대신에 ‘\’를 지원 )
¤128보다 크거나 같은 두 바이트에 KS X 1001을 배당한다.
¡한글 지원 ( KSC 5601 )
q참고자료
qMS949, CP949 ( MS 확장완성형 한글)
¤MicroSoft에서 제정, Windows95부터 지원하며 한글 Windows의 기본 인코딩
¤EUC-KR의 확장이며, 하위호환성이 있음
¤128보다 작은 바이트에 KS X 1003을 배당한다.
¤128보다 크거나 같은 두 바이트에 KS X 1001을 배당한다.
¤KS X 1001(KSC5601)의 미흡한 한글지원 문제를 해결함
¤현대 한글 11,172자를 모두 지원함
¡기존 2,350글자에서 추가로 8,822 글자를 지원.
¡,,, KSC5601에서 미지원하는 글자를 모두 지원함
¤MS에서 임의로 제정한 문자셋이기 때문에 많은 반대와 비난이 있었지만 현재는 Oracle DB,JAVA등 많은 환경에서 지원하고 있다.
발표당시에는 유니코드가 없을때고 KSC5601 완성형의 문제를 근본적으로 해결하는 조합형에 대한 열망이 클때라 MS에서 조합형을 지원해주기를 바라는 목소리가 많았다. 하지만 이미  KSC5601 완성형으로 작성된 수많은 문서들의 하위호환성 때문에 MS에서는 비난을 감수하고 확장완성형으로 KSC5601의 취약점을 보완하는 방향을 선택하였다.
¤CP949와 MS949는 완전히 동일한 것이나자바에서는 서로 다르게 구분해서 사용되므로 주의를 요한CP949IBM에서 처음 지정한 코드 페이지(sun.nio.cs.ext.IBM949)가 기준이고 Microsoft가 제정한 확장 완성형은 MS949(sun.nio.cs.ext.MS949)를 기준이다. 대부분의 환경에서는 구분없이 사용되나 Java에서는 서로 다르게 구분되므로 주의를 요한다.
Java에서는 CP949EUC-KR 같이 취급되며, 확장 완성형을 사용하기 위해서는 MS949로 지정해야 한다.
¤ms949는 추가되는 8822글자에 대한 코드값을 사용하지 않는 영역을 임의로 할당하였기 때문에 글자 코드값이 정렬되지 않는 문제가 있다. 예를 들어 '가'의 코드값은 '간'보다 작기때문에 코드값 비교를 통해서 간단히 문자열 정렬을 할수가 있지만, 추가된 확장한글은 단순비교를 하면 뒤죽박죽이 되어 버린다. 이러한 문제를 피하려면 조합형이나 유니코드값 변환테이블을 사용해서 정렬을해야 한다. 
¤마이크로소프트에서는 CP949/MS949ks_c_5601-1987이라고도 부른다.  
IE
브라우저에서 EUC_KR 페이지를 다른 이름으로 저장하면 charset=ks_c_5601-1987 으로 저장된다.  KSC5601 의 역사를 고려하면 참 생뚱맞은 이름이다.
q참고자료

      Unicode ( 유니코드 )
q유니코드는 전 세계의 모든 글자를 하나로 표현하려는 체계임. Unicode 페이지에서 더 상세 설명.

'그외 주제들 > 한글처리' 카테고리의 다른 글

Response 구간 정리  (0) 2013.09.30
Request 구간 정리  (0) 2013.09.30
JSP,Servlet에서 한글 문제를 피하려면..  (0) 2013.09.30
Unicode ( 유니코드 )  (0) 2013.09.30
Character-Set & Encoding이란?  (0) 2013.09.30
Posted by 행복한삶~!!
|
한글 처리관련 내용을 업데이트 하며... 
      오랫동안 한글 처리에 관련해서 관심이 많았는데, 우연한 기회에 한글처리 관련해서 정리할 기회가 되서.. 
      열심히 구글링 및 테스트한 결과를 정리하게 되어 기쁘게 생각한다.. 많은사람들에께.. 부디 도움 되길... ^^; 

q문자셋 ( Character Set)
¤하나의 언어권에서 사용하는 언어를 표현하기 위한 모든 문자(활자)의 모임을 문자셋이라고 한다. 영어라면 'A', 'B', 'C'에서 'Z'까지(소문자 a에서 z), 한글이라면 ''에서 ''까지다. 물론 숫자나 특수 문자뿐만 아니라 인쇄와 통신을 제어하기 위한 제어 문자도 문자셋에 포함되어야 한다. 중국어,일본어, 힌두어, 아랍어등 각각 문자셋은 고유 언어의 특징을 반영하는 문자들이 포함된다.
q인코딩 ( Encoding )
¤문자 집합을 코드 형태(일반적으로 행렬)로 표기한 것을 코드화된 문자 집합(CCS, coded character set)이라고 한다. 예를 들어 ''에는 10001, ''에는 10002와 같이 코드를 할당하는 방식 말이다. 그리고 문자 집합을 컴퓨터에 저장하기 위해서 옥텟(octet, 8비트 단위) 형태로 표현한 것을 인코딩 방식(CES, character encoding scheme)이라고 한다.
q문자셋과 인코딩은 동일하지 않지만, 실제적으로는 많 혼용해서 사용하고 있다.
¤한글 : KSC5601, EUC-KR, MS949
¤일본어 : Shift-JIS, EUC-JP
¤영문 서구권 : US-ASCII, ISO-8859-1
¤유니코드 : ISO-10646

'그외 주제들 > 한글처리' 카테고리의 다른 글

Response 구간 정리  (0) 2013.09.30
Request 구간 정리  (0) 2013.09.30
JSP,Servlet에서 한글 문제를 피하려면..  (0) 2013.09.30
Unicode ( 유니코드 )  (0) 2013.09.30
문자셋과 인코딩  (0) 2013.09.30
Posted by 행복한삶~!!
|