문자와 관련된 질문입니다.

bureokjam의 이미지

1) 문자세트(character set)의 두 가지 의미?
문자세트라고 하면, 단순히 "문자들만"을 의미하는 것인지, 문자들을 포함하여 각 문자에 할당된 "정수값 까지도"의미 하는 것인지 모호합니다. 문맥에 따라 구분할 의향은 있지만, 근본적으로 어디까지는 문자세트라고 하는지 궁금합니다.

2) 코드 페이지(code page)란?
책을 구성하고 있는 페이지는 하나의 단위로서, 서로 다른 정보를(물론 유사할 수는 있지만 이는 같은 정보라고 볼 수 없습니다) 담고 있습니다. 또한 이러한 페이지는 불완전하지 않고 완전해야 합니다. 이러한 관점에서 볼때 코드 페이지란 각 국가의 문자 정보를 담고 있는 하나의 단위에 불과한 것이 맞나요? 물론 독자(?)는 그 자체로서 완전한 코드 페이지를 활용할테구요.

3) 유니코드(unicode)란?
간단하게 코드 페이지의 집합을 유니코드라고 설명할 수 있을까요?

4) 인코딩(encoding)과 디코딩(decoding)이란?
최근에 뉴스에 나왔던 북한의 난수방송 역시 인코딩과 디코딩으로 볼 수 있다고 생각 되는데요. 예를 들어서 47139 이라는 난수가 "특정 책자의 47쪽 13번째 줄 9번째 문자"라는 의미를 담고 있다면, 이처럼 미리 약속된 처음 2개는 쪽을, 다음 2개는 줄을, 마지막 1개는 문자의 위치를 인코딩과 디코딩으로 볼 수 있는 건가요? 그렇다면 결국 인코딩과 디코딩은 상호간에 동일한 책자(동일한 코드 페이지)를 사용해야 지만이 의미가 있는거죠? 또한 동일한 코드 페이지를 사용하더라도 인코딩과 디코딩은 무수히 많을 수도 있는거죠? 예를 들어서 ASCII 라는 코드 페이지를 사용했을 때의 인코딩과 디코딩은 하나만 존재하는게 아니죠?

Prentice의 이미지

  1. Set이라고 하니 집합이라고 생긱하기 쉬워서 그런 것인지 순서와 상관없다고 착각하기 쉽지만 보통 고정된 순서를 지니며 이에 따라 (순서와 매칭되는) 정수값의 의미도 포함한다고 보셔도 좋다고 생각합니다. 헤더 같은 곳에서 character set 필드에 encoding 이름이 들어가곤 하는데 이와 연관이 있다고 생각합니다.
  2. 각 언어마다 글자가 100개씩 있는데 글자를 상징하기 위해 쓸 수 있는 숫자도 100개밖에 없을 때는... 언어마다 숫자와 글자의 대응이 다 따로겠죠. 그런 제한된 상황에서 서로 다른 대응 체계로 코드페이지가 나온 것입니다.
  3. 유니코드는:
    • 유니코드는 거대한 하나의 character set입니다. 코드페이지는 필요없습니다. 글자 수에 비해 쓸 수 있는 숫자가 충분하니까요. 결국 하나의 숫자가 하나의 글자(*)의 의미를 지닙니다.
    • 글자들 사이의 상관 관계도 담고 있습니다. 예를 들면 a를 대문자로 만들면 A, B를 소문자로 만들면 b, a에 움라우트를 더하면 ä, 이걸 대문자로 만들면 Ä 같은 거요. 아니면 한글 글자에서 ㅎ+ㅏ+ㄴ 더하면 '한'이 나오는 것과 같은 조합/분해 관계도 다루고 있습니다. 더 나아가면 아랍어, 인도 문자 등등에서 글자의 위치가 글자의 모양에 영향을 주는 현상 등등에 대해서도 규정하고 있습니다. 문자의 폭에 따라 전각 문자 vs. 반각 문자 구분도 다룹니다.
    • 글자에 대응하는 숫자를 그럼 어떻게 기록할 것인가, 이 기록의 문제가 바로 encoding입니다. 1바이트로 적을 수 있는 글자를 무조건 4바이트 꽉꽉 채워서 적을 수도 있는 법이고, 1바이트로 적을 수도 있는 법입니다. 유니코드에서는 현재 UTF-8, UTF-16, UTF-32로 (기본 단위의 비트 수에 따라) 세 가지 주요 인코딩을 명시하고 있습니다. UTF-8과 UTF-16에서는 글자 하나의 길이가 고정이 아니라 가변입니다. (UTF-7 등은 제가 잘 몰라서 패스할게요.)

*: +엄밀히 말하면 글자가 아닌 것들이나 다른 글자에 작용하는 것들 기타 등등도 포함합니다.

Prentice의 이미지

  1. 집합의 의미로만 얘기할 때는 character repertoire라고 하기도 하고, 문자와 숫자와의 대응을 강조할 때는 coded character set라고도 하는 모양입니다.
Prentice의 이미지

취미로(?) 공부한 내용이라 실제로 이와 관련된 업무를 하시는 분들이 보시기엔 미흡한 면이 많으리라 생각합니다. 불명확하거나 부정확한 내용 보시면 많은 가르침 부탁드립니다. 감사합니다.

bureokjam의 이미지

1번에서 set이라 하여 순서와 상관없는게 아닌, 고정된 순서를 갖는다고 하셨는데 이와 관련된 것이 collating sequence라는걸 알게 되었습니다. 그렇다면 collating sequence는 단지 repertorie의 순서만을 결정지어주는건가요? 또 각 character set에도 collating sequence가 존재하겠지요?

Prentice의 이미지

Collation은 code 나열 순서와는 다르게 되기도 하며, locale(어느 나라 어느 언어를 표기하고 있는지 등등)에 따라 바뀔 수 있습니다. 예를 들면...

가 나 다 ㄱ ㄴ ㄷ 이 문자들이 갖는 code 값을 따져보면:

  • 가 U+AC00
  • 나 U+B098
  • 다 U+B2E4
  • ㄱ U+3131
  • ㄴ U+3134
  • ㄷ U+3137

문자 뒤에 유니코드에서 각 문자를 고유하게 표현하는 16진수 숫자를 적어보았습니다. 그러면 각 문자에 할당된 숫자의 크기 순서대로 나열하면 ㄱ ㄴ ㄷ 가 나 다가 되겠지만, 사실 한국인의 상식(?)에 따라 가나다순으로 나열하면 이렇게 돼야 하겠죠: ㄱ 가 ㄴ 나 ㄷ 다

제가 말했던 숫자/순서는 '가' 문자는 U+AC00, '각' 문자는 U+AC01 등등 각 문자가 코드표에서 순서대로 등장하는 것에 대한 얘기라고 생각해주시면 되겠습니다. (다른 사람이 '각'이 U+AC00인 다른 순서를 만들 리는 없을 테니까요.)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.