Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
ansi 그리고 unicode의 compatibility
2014.07.14 12:02
8bits ansi는 7bits ascii의 확장으로 알고 있는데요. ascii의 16bits표준(?)확장인 unicode와 ansi와의 호환이 얼마나 어떻게 안되어서 hfont이야기며, eur-kr이야기가 나오는지 궁금합니다. 자세히 설명해주실 분 계신가요? 감사합니다. (지식이 짧아 질문이 제대로 됐는지도 모르겠습니다.)
댓글 3
-
yihoze
2014.07.14 13:03
-
nanim
2014.07.14 13:24
(1) ANSI라는 용어.
* MS Windows에서는 Code Page를 "ANSI Code Page"라고 부릅니다.
* 윈도우즈는 모든 문자를 (내부적으로) 유니코드로 다룹니다. 그러나 cmd(명령행)는 유니코드를 지원하지 않습니다. 그리고 일부 프로그램은 예전 윈도우와의 호환성을 위하여 코드 페이지 문자셋을 이용합니다. 윈도우즈 API 함수에서 A(ANSI)는 코드페이지를 이용하는 것이고 W(Wide)는 유니코드를 이용하는 것입니다.
* ANSI라는 허황된 명칭으로 불리게 된 사연은 미국 영어를 표현하는 코드 페이지 1252가 원래 ANSI 초안을 바탕으로 작성되었기 때문이라고 합니다. 이 ANSI 초안은 나중에 iso8859-1 표준이 됩니다. 즉, cp1252는 거의 iso8859-1과 일치(유사)한다고 합니다.
* 미국 영어가 아닌 언어는 각각의 코드 페이지 문자셋으로 구현되는데 이 문자셋은 미국표준기구(ANSI)와 아무 상관도 없는데도 불구하고 "ANSI 코드페이지"라고 잘못 불리게 된 것입니다.
* 따라서 한국어 코드페이지 cp949를 "ANSI"라고 부르는 것은 (예를 들면 notepad의 저장 옵션에서 ANSI라고 하는 등 흔히 그렇게 불리기는 해도) 사실 말도 안되는 명칭입니다.
* ASCII라는 것도 영어 알파벳과 문장부호 몇 개를 제외하면 의미가 없는 용어이고 "한글문자"는 ASCII와 아무 관련이 없습니다.
(2) 한글
cp949의 한글 부분은 보통 UHC(통합한글코드)라 부르는 것으로 소위 완성형(ks x 1001) 2350자는 EUC-KR과 동일하고 현대 한글 11172자 중에서 그 나머지는 별도로 코드를 부여한 것입니다. CP949-Unicode 맵핑 테이블을 참고하십시오.
"호환이 얼마나 안 되느냐"고 물으셨는데, 간단히 말씀드리면 라틴 문자 영역을 제외하고는 아무 것도 호환되지 않습니다.
(3) hfont
텍의 입장에서 윈도우즈에서 UHC 한글로 작성한(즉 의도적으로 유니코드로 저장하지 않은) 텍스트를 처리하는 문제입니다.
XeTeX-ko, LuaTeX-ko는 입력된 한글 인코딩이 cp949든 unicode(utf-8)든 잘 처리합니다. (물론 cp949일 때는 그것을 알려주는 명령(선언)이 필요합니다)
문제는 pdftex 또는 legacy tex인데요, 이 엔진에서 한글을 처리하는 kotex-utf는 원칙적으로 유니코드만 받아들입니다.
cf. http://wiki.ktug.org/wiki/wiki.php/CP949%ED%95%9C%EA%B8%80
-
지나가다
2014.07.16 17:57
yihoze님 nanim님 감사합니다! 유니코드에 대해 그리고 ansi라는 용어에 대해 재미있는 글 잘 읽었습니다. 도움이 되었습니다. 거듭 감사드립니다!
ANSI는 미국 규격인데 이것이 한글 문자 코드를 정의했을 리 없지 않습니까? 마이크로소프트가 나름 언어별로 정의한 것이 character page라는 것이고요. 전에 제가 잠시 조사했던 바에 따르면, 이렇습니다.
Windows-1252 = CP1252 = ANSI = ISO 8859-1
언어별로 인코딩 체계가 제각각이었고, 한 언어 안에서도 여러 인코딩 체계가 사용되었습니다. 80년대에 삼보, 금성, 삼성, 대우, 현대가 저마다 다른 한글 인코딩을 썼던 것으로 알고 있습니다.
거의 모든 언어의 문자를 포함하는 것이 유일하게 유니코드입니다.
위에서 예로 든 Windows-1252를 사용한다고 가정해 보죠. 이것은 8비트여서 독일어의 ä 같은 라틴 계열 문자들을 표현할 수 있습니다. 그렇지만 키릴 문자들은 포함하지 않습니다. 그것을 넣을 빈 자리가 없으니까요. 8비트 체제에서 방법은 라틴 문자들이 차리한 자리들, 대략 C0에서 FF까지 차지하는 것입니다. 쉽게 말해 8비트 인코딩 시스템으로는 한 문서에서 독일어와 러시아를 동시에 표현할 수 없다는 얘기입니다.
16비트로도 문제가 해결되지 않습니다. 16비트로 대략 65000자를 표현할 수 있는데, 현재 지구에서 100만 개가 넘는 문자들이 쓰이거나 쓰였다죠. 예를 들자면, (아마도 삼단 조판을 사용하여) 한국어, 일본어, 중국어로 성경을 만든다고 가정해 보죠. 16비트 인코딩 시스템으로는 이 작업이 아마 불가능할 겁니다. 어느 인코딩 시스템이 부분적으로나마 CJK 글자들을 포함했었는지 모르겠습니다.
다른 인코딩 시스템과는 달리, 유니코드 자체는 일련번호만 가질 뿐 몇 비트다라고 말하지 않습니다. 유니코드를 어떻게 구현하느냐에 따라 UTF-8, UTF-16, UTF-32 따위가 있죠. ( http://hoze.tistory.com/255 )
결론적으로 말해, 유니코드는 다른 인코딩 시스템과 (부분적으로 호환을 논할 수 있을지라도) 비교할 수 있는 것이 아닙니다.