문자코드ppt
유창희 조사
코드(Code)란 어떤 대상을 간략하게 표시하기 위한 일종의 약속이다 문자 코드도 많고 많은 코드 중의 하나이다. 문자 코드란 문자를 숫자에 대응시켜 나타내는 일종의 대응표이다. 컴퓨터는 숫자만, 그것도 이진수만 다룰 수 있는 존재이고 무나를 직접 다룰 수 없기 대문에 문자를 표현하기 위해서는 개별 문자를 고유의 숫자값에 대응시켜야만 한다. 문자 코드란 문자와 숫자의 대응 관계를 정의한 체계이며 대응시키는 방법에 따라 여러 가지 종류가 있다. 가장 흔하고 오래된 문자 코드는 7비트 크기로 영문자와 숫자, 기호들을 대응시킨 아스키(ASCII) 코드이며 지금도 많이 사용될 뿐만 아니라 이후 확장된 문자 코드들도 아스키를 기반으로 한다. 윈도우즈의 유저, GDI 모듈이 사용하는 ANSI 문자셋과 FAT 파일 시스템이 사용하는 OEM 문자셋도 아스키 문자셋에 기반하되 0x80이후의 문자가 약간 다르게 정의되어 있다. 아스키 문자셋이나 ANSI문자 셋처럼 한 바이트로 한 문자를 표현하는 문자 코드를 SBCS(Single Byte Character Set)라고 한다. 바이트 단위이기 때문에 최대256개의 문자를 표현할 수 있다.
그러나 이 코드는 애초에 미국의 문자에만 맞게 작성되었기 때문에 독일어나 불어 등의 특별한 기호를 가진 문자를 표현하기에 부족했으며 더구나 알파벳과 모양이 완전히 다른 그리스나 러시아의 문자는 전혀 표현할 수가 없었다. 그래서 아스키 코드를 확장한 확장 아스키 코드를 정의하고 같은 코드에 이중으로 문자를 할당할 수 있는 방식인 코드 페이지로 새로운 문자들을 표현하고자 노력했으나 근본적인 해결방법이 되지 못했다. 왜냐하면 특정 코드 페이지에서 작성한 문서를 다른 코드 페이지에서 읽을 수 어벖어 문서 교환이 어려운 난점이 있기 때문이다. 또한 서야양 국가들의 문자는 대부분 8비트 범위 내에서 표현할 수 있지만 한국, 중국, ㅇ리본 동양 3국(CJK라고 한다)의 문자는 그 보다 문자수가 훨씬 더 많으므로 한 바이트로 모든 문자를 표현할 수가 없다. 그래서 동양 3국은 문자 하나를 표현하기 위해 2바이트를 사용하는 DBCSD(Double Byte Character Set) 체계를 사용해 왔으며 이 체계는 현재까지도 계속 사용되고 있다. 우리가 현재 사용하고 있는 DBCS는 영문, 기호는 8비트로 표현하고 한글은 16비트로 표현하는 ANSI의 확장형 문자 코드이다. SBCS와 DBCS가 섞여서 존재하며 때로는 16비트를 넘을 수도 있기 때무눈에 MBCS(Multi Byte Character Set)라고 한다. "럭키Seoul"이라는 문자열은 메모리 상에 다음과 같이 표현된다.
럭 키 S e o u l \0 --------------------------------------------------------------- (2byte)(2byte) 한글은 2바이트를 차지하며 영문은 1바이트만 차지한다. 한 문자의 길이가 일정하지 않기 때문에 바이트 길이만으로 문자의 개수를 정확하게 알 수 없는 문제가 있는데 "럭키Seoul"이라는 문자열은 모두 7개의 문자로 이루어져 있지만 배열의 크기는 9바이트(널을 제외하고)이다. 문자열중에 2바이트 짜리 문자가 몇 개나 있는지 처음부터 순서대로 세어 와야만 문자 개수를 정확하게 알 수 있다. 똑같은 길이라도 문자열을 구성하는 문자에 따라 개수가 달라지는 것이다. 또한 문자열 중간에서 바로 앞 문자를 구하고 싶을 때도 일반적인 방법으로는 구할 수 어벖으며 반드시 선두에서부터 문자를 하나씩 읽어와야만 한다. 왜냐하면 중간 위치가 문자의 선두인지 2바이트 문자의 뒷부분인지를 정확하게 알 수 없기 때문이다. 각 바이트가 2바이트짜리 문자인지 아닌지는 IsDBCSLeadByte 함수로 조사할 수 있는데 버퍼 처음부터 이 함수로 각 문자의 길이만큼 이동해야 한다. DBCS문자열의 앞 뒤 분자를 구할 때는 CharPrev, CharNext라는 함수를 사용할 수도 있으나 CharPrev 함수의 경우 속도가 굉장히 느리고 비효율적이다.
길이와 앞문자를 구하기의 비효율성보다 더 큰 문제가 있는데 DBCS는 각 코드 페이지에 따라 실제로 맵핑되어 있는 문자가 달라질 수 있어 국제적인 범용 프로그램 제작에는 부적당하다는 것이다. "럭키Seoul"이 한글 윈도우즈에서는 그대로 보이지만 중국어 윈도우나 일본어 위닌도우에서는 한글 코드 영역에 히라가나, 또는 한자 코드가 맵핑되어 있으므로 이대로 보일 리가 없다. 마찬가지로 우리가 일본 웹 사이트에 접속하거나 중국어 문서를 읽을 때도 제대로 보이지 않고 엉뚱한 한글이 보인다. 외국 문서가 정확하게 출력되려면 코드 페이지를 정확하게 선택해야 하는 불편함이 있다. 그나마도 코드 페이지란 특정 국가의 코드에 무나를 강제로 맞추는 것이기 때문에 여러 나라의 언어를 동시에 표현하고자 할 때는 전혀 도움이 되지 못한다. 예를 들어 한글로 된 일본어 교본이라든가 한중일 문자를 비교하는 논문을 작성할 대는 동시 표현을 할 방법이 없는 것이다.
이원구 조사
*내용 구성 1)문자코드란? 2)문자코드의 종류 *내용 문자코드란,단일 문자의 내부 표현을 나타내는 코드입니다. 어떻게 보면,어떠한 대상을 간략하게 표시하기 위한 일종의 약속이기도 할수 있겠지요... 문자코드는 종류가 다양합니다.
2)문자코드의 종류 위에서 언급했듯이 문자코드는 종류가 다양합니다. 문자코드에는 ASCII코드,표준BCD코드,EBCDIC코드,유니코드,한글코드가 있습니다. -ASCII 코드:아스키코드는 American Standard Code for information interchange의 약자로, 미국에서 표준화가 추진된 정보교환용 7비트 부호로 PC를 중심으로 국제적으로 사용됩니다. 또한,컴퓨터에 처리하기 용이한 8비트 데이타를 이용하기 위하여 숫자,문자,특수문자에 번호 를 부여한 것입니다. -표준 BCD코드:BCD코드는 Binary-Coded Decimal Code의 약자로,숫자,영자,특수 기호를 나타 내기 위한 6비트로 이루어지는 코드로,오류 검사용의 1비트가 부가되어,전체로서는 7비트로 구성됩니다.
안준오 조사
1. charset의 의미 charset = "coded character set" charset은 "컴퓨터에서 문자를 표현하기 위해, 각 문자를 정수값에 대응시켜 놓은 체계"를 의미합니다. 예를 들어, euc-kr charset이라면, 영숫자와 한글 그리고 일부 특수문자와 한자들을 정수값에 대응해 놓은 것입니다. euc-kr환경에서 한글을 입력하면, 컴퓨터는 euc-kr charset에서 각 문자별로 지정한 정수값을 쓰게 됩니다. 2. charset이 달라진다면.. 각 charset별로, 표현하고자하는 문자와 대응하는 정수값이 달라질 수 있습니다. 예를들어 euc-kr은 태국문자를 위한 정수값을 정의하지 않았으므로, 태국문자는 표현하거나 입력할 수 없습니다.
그리고, euc-kr charset에 맞춰 한글로 어떤 내용을 작성했는데, 이것을 iso-8859-1 charset 환경에서 열어본다면, 한글 대신에 엉뚱한 특수문자쌍들을 보게 될 것입니다. 이런 문제 때문에, 문자 데이터를 주고 받을 때는 서로 간에 charset을 일치시킬 필요가 있습니다. 그렇지 않으면, 원래 생각했는 내용 대신 "깨진 문자들"을 보게 될테니까요. ( 가끔 charset은 일치되었는데, 사용하는 폰트에 대응하는 문자가 없어서 깨져보이는 경우도 있습니다. ) 서블릿 코딩시에, content type의 일부로 charset을 명시하는 것은 웹 브라우저에게 사용하는 charset을 알려주어 오해하지 않게 하기 위해서입니다.
3. 한글을 표현할 수 있는 charset 한글을 표현할 수 있도록 설계된 charset은 euc-kr외에도, ksc5601, cp933, cp949 등등 꽤 많습니다. 그리고, 전세계 모든 문자를 표현할 목적으로 설계된 unicode역시 한글을 지원합니다. 그러나, 한글을 지원하는 charset을 사용하더라도, 문서를 만들 때 사용한 charset과 읽을 때 사용하는 charset이 다르다면, 제대로 그 내용을 볼 수 없을 것입니다. 이 경우에는 따로 conversion로직을 사용하여 원하는 charset에 맞춰 데이터를 가공해야 할 것입니다. ( euc-kr, ksc5601 같은 경우는 거의 차이가 없어 호환가능합니다. )
3. 영문 OS에서 한글 표현 charset에 맞추어 문자데이터를 처리하는 것은 OS나 DBMS, 미들웨어 등 플랫폼이므로, 플랫폼에서 제공해주지 않는 charset을 사용할 수는 없습니다. 다행히도, 최근의 플랫폼 SW들은 다양한 charset 지원을 포함하고 있습니다. 만약 어떤 OS가 euc-kr모드로 작동하고 있다면, 설령 영문OS라 하더라도, 한글 처리에 문제가 없다고 볼 수 있습니다. 문제가 있다면 euc-kr모드로 작동하고 있는 것이 아니겠죠. 저 같은 경우, 영문 OS를 설치하고, 그 위에서 한글을 사용해 본 적이 있습니다.
4. encoding charset과 비슷한 의미로 사용하는 단어로 encoding이 있습니다. charset이 문자에 대해 정수값을 지정한 것이라면, encoding은 "문자를 표현하는 정수값을 어떤 bit배열로 표현할 것"인지를 의미합니다. 대부분의 경우, charset과 encoding을 구별할 필요가 없습니다. 왜냐하면 정수값을 bit배열로 표현하는 방법은 하나만 있을테니까요. 그러나 unicode 경우에는 UTF-8, UTF-16 같이 몇 가지 다른 encoding을 사용합니다. charset이 같다면, 그 charset을 지원하는 어떤 encoding을 사용하든지, 각 문자에 대응하는 논리적인 정수값은 동일합니다. 그러나 실제로 기록되는 bit배열은 encoding에 따라 달라질 수 있습니다. 이 경우, 제대로 데이터를 주고 받으려면, charset뿐 아니라 encoding까지도 맞춰야 합니다.
성민영 조사
문자 인코딩 또는 줄여서 인코딩은 문자나 기호들의 집합을 컴퓨터에서 저장하거나 통신에 사용할 목적으로 부호화하는 방법을 가리킨다. 문자 인코딩을 통해 부호화되어, 복호화하면 본래의 문자나 기호를 뜻하게 되는 부호를 문자 코드라고 한다. 문자 인코딩의 대표적인 예로 전건을 길게, 또는 짧게 두드려서 라틴 알파벳을 나타내는 모스 부호가 있으며, 라틴 알파벳, 숫자, 특수 문자 등을 정수와 그에 대응되는 7비트 이진수로 표현하는 방법인 아스키가 있다. 컴퓨팅 초기에는, 아스키, EBCDIC과 같은 문자열 세트가 표준으로 자리잡았다. 이러한 문자열 세트의 제한은 명백했으며 수많은 애드혹 방식이 개발되었다. 한중일 계열의 동아시아 스크립트를 포함하여 다중 문자 지원이 시급했다.
문자 인코딩의 구성 문자 집합 또는 문자셋은 정보를 표현하기 위한 글자들의 집합을 정의한 것으로, 직접적으로 사용되지 않을 수도 있고 한 문자 집합을 여러 문자 인코딩에서 쓸 수도 있다. 특히 집합 안의 문자들에 음수가 아닌 정수들을 배정한 것을 부호화된 문자 집합이라 한다. 문자 집합은 ASCII와 같이 더 이상의 문자가 추가될 수 없기도 하고, 유니코드와 같이 문자가 계속 추가될 수 있기도 하다. 일반적으로 문자 집합과 문자 인코딩은 어떤 문자를 사용할 수 있으며 어떤 식으로 표현되는지를 나타낸다는 데서 동의어로 취급되기도 한다. 역사적인 이유로 MIME이나 그에 기반한 시스템은 문자 집합을 문자 인코딩을 나타내는 데 사용한다.
문자 인코딩 형태는 특정한 문자 집합 안의 문자들을 컴퓨터 시스템에서 사용할 목적으로 일정한 범위 안의 정수들로 변환하는 방법이다. 여기에는 유니코드 코드 포인트를 8비트 숫자의 집합으로 나타내는 UTF-8이나, 16비트 숫자의 집합으로 나타내는 UTF-16, 그리고 대부분의 일반적인 문자 인코딩들이 포함된다. 문자 인코딩 구조는 문자 인코딩 형태로 변환된 코드값을 옥텟 기반의 시스템에서 사용하기 위하여 옥텟들으로 변환하는 방법이다. 대부분의 문자 인코딩 형태는 이 과정에서 아무런 일도 일어 나지 않으며, 8비트 이상의 숫자를 사용하는 UTF-16과 같은 문자 인코딩 형태의 경우 엔디안을 지정해 주는 것으로 충분하다. 여기에는 ISO 2022와 같은 복합 인코딩이나, SCSU와 같은 압축 방법 등이 속한다