노무현 대통령 배너
BLOG main image
왕미친놈의 왕미친세상입니다. 미친 소리는 써도 되지만, 근거 없는 소리는 쓰면 안 됩니다.


유니코드 지원이란?

우리가 흔히 "프로그램이 유니코드를 지원한다"라고 말할 때는 그 프로그램이 유니코드를 나타낼 수 있느냐가 아니라, 그 프로그램의 메뉴나 오류 메시지를 표현하는 코드 페이지가 유니코드이냐를 뜻합니다. 당연한 말이겠지만, 그 프로그램에서 유니코드 문자를 입력할 수 있는지는 전혀 고려하지 않습니다.

이때 프로그램 메뉴나 오류 메시지를 유니코드로 나타내는 경우에 네이티브로 유니코드를 지원한다는 표현을 사용하기도 합니다.

유니코드 출력

그렇다면 유니코드를 지원하는 프로그램만 유니코드를 올바르게 나타낼 수 있을까요? 유니코드를 지원하지 않는 프로그램은 유니코드를 올바르게 나타낼 수 없을까요? 그렇지는 않습니다. 유니코드 지원과 유니코드 표현은 아무런 관련도 없습니다. 아, 관련이 있기는 합니다. 특정 코드 페이지를 지원하는 프로그램은 그 코드 페이지에 해당하는 문자를 나타내기가 좀 더 쉽습니다.

그렇지만 그 둘 사이의 관계가 절대적이지는 않습니다. 화면 표시는 그저 화면 표시일 뿐 그 이상의 것이 아니기 때문입니다. 물론 텍스트 편집 프로그램의 경우에는 화면 표시가 매우 중요한 요소이지만, 실제 프로그램의 실행과는 별로 관련이 없습니다.

좀 더 전문적인 용어를 써서 말한다면, 유니코드 출력은 문자 인코딩(Character encoding)의 문제이고, 유니코드 지원은 문자 집합(Character set)의 문제입니다.

유니코드를 지원하지 않는 프로그램의 유니코드 출력 예시

CLCL

멀티 클립보드 프로그램인 CLCL은 유니코드를 지원하지 않는 프로그램, 곧 지원하는 문자 집합이 유니코드가 아닙니다. 그러나 클립보드 지원 프로그램이기 때문에 클립보드에 복사한 내용 가운데 유니코드가 있을 경우 그것을 잘 출력해 줍니다. 물론 이 경우 폰트가 잘 지원되어야 하지만, 그에 대해서는 논외로 합니다. 한편 CLCL도 유니코드 출력이 기본 기능은 아닙니다. 추가적인 DLL 파일이 필요하지만, 그것만 설치한다면 아무 문제 없이 유니코드 출력이 가능합니다. 더구나 그 DLL 파일이 유니코드를 네이티브로 지원하지도 않습니다.

예시 1 : 유니코드를 잘 나타내는 CLCL

예시 1 : 유니코드를 잘 나타내는 CLCL


예시 2 : 유니코드를 뭉개져 버린 CLCL

예시 2 : 유니코드를 뭉개져 버린 CLCL


위 두 화면은 유니코드를 CLCL이 어떻게 나타내는지를 보여주고 있습니다. 예시 1은 기본 출력인데, 현재 유니코드로 설정한 상태입니다. 기본값은 TEXT입니다. 예시 2TEXT일 때의 화면 출력을 보여 주고 있습니다. 게다가 예시 1예시 2는 현재 화면에 보이는 상태 그대로 붙여넣기가 가능합니다. 다시 말해 화면 출력과 프로그램의 유니코드 지원이 별 상관이 없다는 뜻이지요.

Notepad++

좀 더 확실하게 보여줄 필요가 있다면, 텍스트 편집기 가운데 유니코드 버전과 ANSI 버전을 함께 제공하는 프로그램을 선택하면 됩니다. 대표적인 프로그램이 바로 Notepad++입니다.

메모장의 유니코드 출력 - 옛한글은 한국어 영역이 아닌 유니코드 영역에 있다.

예시 3 : 메모장의 유니코드 출력 - 옛한글은 한국어 영역이 아닌 유니코드 영역에 있다.


Notepad++ ANSI 버전의 유니코드 출력

예시 4 : Notepad++ ANSI 버전의 유니코드 출력


Notepad++ 유니코드 버전의 유니코드 출력

예시 5 : Notepad++ 유니코드 버전의 유니코드 출력


위의 세 그림은 유니코드 버전이냐는 사실과 유니코드를 출력할 수 있느냐는 사실과는 관련이 적음을 보여주고 있습니다. 유니코드를 출력할 수 있느냐는 오로지 프로그램이 유니코드 폰트 및 유니코드 합자를 지원하는 알고리듬을 가지고 있느냐에 좌우됩니다.

관련 문서

 

이 글은 스프링노트에서 작성되었습니다.


글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

한컴오피스 베타버전 버그 28 - 유니코드 버그 4 및 글꼴 (표기) 버그 2
- 옛한글 합자와 일반 글자는 다른가요?
- 왜 옛한글은 무조건 함초롬체로 표시하나요?

ᄒᆞᆫ글2010 베타버전에서 옛한글을 한양PUA가 아닌 유니코드 한글 자모 영역을 이용하여 나타내 주고 있습니다. 이는 대단히 좋은 현상입니다. 그런데 조금 이상한 현상을 발견했습니다. 이런 이상한 현상을 접하면 접할수록 옛한글과 얽힌 녀석은 판도라 상자라는 생각이 새록새록 솟아납니다.

벌레의 유형

ᄒᆞᆫ글 씨! 옛한글의 자모 합자는 일반 글자로 취급해야 합니다. 절대 일반 글자처럼 취급하면 안 됩니다. 그리고 왜 옛한글은 무조건 함초롬체로 표시해 버리나요? 함초롬체가 아닌 다른 글꼴을 사용할 수 있는 옵션을 추가해 주면 좋겠습니다.

개발자의 답변

2010년 1월 30일 버그 리포팅을 한 상태입니다.

벌레의 발견

ᄒᆞᆫ글2010 베타버전에서 은 글꼴을 적용하다가 발견했습니다.

예시 1 : 깨끗하게 나타난 옛한글과 글귀

예시 1 : 깨끗하게 나타난 옛한글과 글귀


예시 2 : 무언가 어긋난 옛한글

예시 2 : 무언가 어긋난 옛한글

위 예시 그림 두 개를 살펴보면 여러 가지가 다릅니다.

  1. 맨 먼저 옛한글의 모양이 확연하게 다릅니다. 한쪽으로 기울어져 있는데, 굳이 검증이 필요 없어 보입니다.
  2. 옛한글의 글자 외형이 현대 한글의 글자 외형과 달라 보입니다. 서로 다른 글꼴처럼 보입니다.
  3. 글자의 자간이 다릅니다. 그러나 이것은 문단 배열과 관련한 워드프로세서의 기능이므로 논외로 합니다.

일단 위 세 가지 다른 점을 발견했습니다. 3번은 벌레가 아니므로 논하지 않겠습니다.

검증 1 : 기울어진 옛한글

예제 1 잘라내기 예제 2 잘라내기

기울어진 옛한글 문제는 근본적으로 옛한글이 화면에 보이는 모양과는 달리 한글 1자가 아니라 한글 낱자 3개이기 때문에 발생한 문제입니다. 다만 그 합자 처리가 매끄럽지 못하기 때문에 발생한 벌레이지요.

그런데 저것이 한글 낱자 3개라는 사실이 이해가 안 된다면 다음 메모장 화면을 보시기 바랍니다.

예시 3 : 메모장에서 72포인트 굴림 글꼴로 나타낸 ᄒᆞᆫ글

예시 3 : 메모장에서 72포인트 굴림 글꼴로 나타낸 ᄒᆞᆫ글


예시 4 : 메모장에서 72포인트 굴림 옛한글 글꼴로 나타낸 ᄒᆞᆫ글

예시 4 : 메모장에서 72포인트 굴림 옛한글 글꼴로 나타낸 ᄒᆞᆫ글

위의 예시 3예시 4는 단지 글꼴을 바꾸었을 뿐인데, 화면에 보이는 모양이 달라졌습니다. 이는 한글 낱자 3개를 하나로 합쳐서 보여주는 기능을 가진 글꼴인지, 아니면 그저 이미 완성된 글자만을 보여주는 글꼴인지에 따라 이처럼 다른 결과를 보여줍니다.

그런데 문제는 이러한 낱자를 합자 처리한 그 결과물은 1문자처럼 처리하는 게 아니라 1문자로서 처리해야 한다는 점입니다. ᄒᆞᆫ글2010 베타버전에서 예시 1의 경우에 옛한글의 자모 합자를 1문자로서 처리했다면 문단 정렬에 따른 자간이 변하더라도 그 장폭이 그대로 유지되었을 것입니다. 그러나 그저 겉보기에만 1문자처럼 처리했기 때문에 문단 정렬에 따른 자간 변화에 대응하여 각각의 낱자가 각각 1글자로써 작용하여 각각 자간을 넓혔기 때문에 예시 2와 같이 왼쪽 위에서 오른쪽 아래로 기울어진 형태를 가지게 되었으리라 여겨집니다.

재미있는 점은 키보드 방향키로 커서를 옮겨 보면 옛한글의 한글 낱자 사이를 이동하지 않고, 옛한글을 1글자로서 인식합니다.

검증 2 : 옛한글의 글꼴

먼저 은 바탕 글꼴로 ᄒᆞᆫ글을 나타내면 다음과 같습니다.

예시 5 : 메모장에서 72포인트 은 바탕 글꼴로 나타낸 ᄒᆞᆫ글

예시 5 : 메모장에서 72포인트 은 바탕 글꼴로 나타낸 ᄒᆞᆫ글

이 모양은 확실히 예시 1의 모양과 다릅니다.

글꼴 외양 비교 1 글꼴 외양 비교 2

위 그림 두 개를 살펴보면 첫 번째 그림에 나타난 글꼴은 순서대로 함초롬바탕, 함초롬돋움 각각 1글자, 은 바탕 2글자이며, 두번째 그림은 달랑 1글자로 은 바탕 글꼴입니다. 이때 두 그림 모두 빨간 동그라미연두 동그라미로 표시한 부분이 차이가 납니다. 게다가 예시 1의 글자는 함초롬바탕의 글자와 매우 비슷합니다.

아마도 ᄒᆞᆫ글2010 베타버전에서는 옛한글을 무조건 함초롬 글꼴로 나타내도록 했나 봅니다. 한글과컴퓨터사에서 옛한글을 잘 나타내도록 열심히 노력했음을 보여주는 대목입니다. 그런데 그게 반드시 좋을까요? 아니라고 생각합니다. 예시 4굴림 옛한글 글꼴은 새굴림 글꼴을 바탕으로 만들었기 때문에 상당히 좋은 품질을 보여줍니다. 이런 글꼴의 경우에도 함초롬 글꼴로 나타낸다? 저는 그것을 바라지 않는데요. 적어도 환경 설정이나 사용자 설정에서 사용자가 결정할 수 있는 기회를 주었어야 한다고 생각합니다. 또한 글자 모양에서 경우에 따라서 옛한글을 강제로 함초롬으로 나타내거나 강제로 함초롬을 적용하지 않는 옵션이 주어져야 함은 당연하고요.

벌레 분석 및 덧붙이는 말

벌레에 대한 분석은 이미 했으므로 간단히 요약하겠습니다.

  1. 문단 정렬과 관련하여 옛한글의 한글 자모 합자를 1글자로서 처리해야 글자가 기울어지는 버그가 안 생긴다고 생각합니다.
  2. 옛한글을 표시할 글꼴을 사용자가 선택할 수 있어야 합니다. 또한 때에 따라서는 기본 글꼴(함초롬 글꼴)을 적용할 수도 있어야 하고요.

제가 버그 2를 보면서 문득 생각난 것이 표현의 자유입니다. 옛한글을 나타내는 것은 표현의 자유에 관한 사항입니다. 그런데 그 때문에 함초롬 글꼴만 사용해야 한다면, 그것은 표현의 자유를 위해 표현의 자유를 억압하는 꼴입니다. 저는 그런 반쪽짜리 표현의 자유보다 진정한 표현의 자유가 더 좋답니다.

1월 31일에 오후에 궁극의 벌레를 다시 발견했습니다. 스크린샷을 첨부합니다.

환골탈태급 벌레! 누가 저것을 한 글자라고 여길까요?

궁극의 환골탈태급 벌레!

관련 벌레

이 벌레와 관련이 있는 벌레는 다음과 같습니다.

관련 문서

내부 문서

외부 문서

이 글은 스프링노트에서 작성되었습니다.


글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

최근 제 블로그의 CSS 설정에서 글꼴 하나를 삭제하고 몇 가지 작업을 더하였습니다. 그런데 그 뒤로 제목의 옛한글이 이상하게 나타나는 현상이 일어났습니다.

벌레의 유형

이 벌레는 모여야 할 때 흩어지는 벌레입니다.

개발자의 답변

2010년 1월 22일 버그 리포팅을 하였습니다.

벌레의 발견

파이어폭스에 나타난 이상한 옛한글

파이어폭스에 나타난 이상한 옛한글

처음에는 파이어폭스에서 발견했습니다.

인터넷 익스플로러에 나타난 이상한 네모

인터넷 익스플로러에 나타난 이상한 네모

인터넷 익스플로러에서도 확인했습니다.

어, 그런데, 분명히 저 제목에 쓰인 글꼴은 은 돋움 글꼴로서 옛한글을 지원하는 글꼴입니다.

글꼴 실험 1 - 보통 글씨

왜 저렇게 이상하게 보일까요? 이상하게 여겨져서 테스트를 하기로 했습니다. 이번에 실험한 글꼴은 은 돋움, 은 바탕, 은 자모 돋움, 은 자모 바탕입니다.

[code html] <div style="font-size: 1.4em; line-height: 100%;"> <p>font-weight:normal;</p> <p>한글 자모 영역(U+1100~U+11FF)을 이용한 합자 테스트</p> <p style="font-family: '은 돋움'; ">은 돋움 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 바탕'; ">은 바탕 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 돋움'; ">은 자모 돋움 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 바탕'; ">은 자모 바탕 : &#x1112;&#x119E;&#x11AB;</p> <p>호환용 한글 자모(U+3130~U+318F)를 이용한 합자 테스트</p> <p style="font-family: '은 돋움'; ">은 돋움 : &#x314E;&#x318D;&#x3134;</p> <p style="font-family: '은 바탕'; ">은 바탕 : &#x314E;&#x318D;&#x3134;</p> <p style="font-family: '은 자모 돋움'; ">은 자모 돋움 : &#x314E;&#x318D;&#x3134;</p> <p style="font-family: '은 자모 바탕'; ">은 자모 바탕 : &#x314E;&#x318D;&#x3134;</p> </div> [/code]

위와 같은 코드를 넣은 HTML 파일을 만들어서 시험을 했습니다. &#x1112;&#x119E;&#x11AB;&#x314E;&#x318D;&#x3134;은 앞서 자주 나왔던 그 문자, 바로 ᄒᆞᆫ입니다. 자세한 사항은 스프링노트 : 문자 인코딩 관련 사항을 참조하기 바랍니다.

그 결과는 아래와 같습니다.

IE6에서 본 옛한글 보통 글씨

IE6에서 본 옛한글 보통 글씨

한편 위에서 호환용 한글 자모의 합자는 지원하지 않음을 알게 되었습니다. 그러므로 코드를 조금 고치겠습니다.

글꼴 실험 2 - 굵은 글씨

보통 글씨의 합자는 잘 나타내지만, 반대로 호환용 한글 자모의 합자는 지원하지 않아서 코드를 고쳤습니다.

[code html] <div style="font-size: 1.4em; font-height: 130%; font-weight:bold;"> <p>font-weight:bold;</p> <p>한글 자모 영역(U+1100~U+11FF)을 이용한 합자 테스트</p> <p style="font-family: '은 돋움';">은 돋움 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 바탕';">은 바탕 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 돋움';">은 자모 돋움 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 바탕';">은 자모 바탕 : &#x1112;&#x119E;&#x11AB;</p> </div> [/code]

참고로 1.4em제 블로그기사 제목(title) 글자 크기입니다.

파이어폭스에서 본 옛한글 굵은 글씨

파이어폭스에서 본 옛한글 굵은 글씨

은 자모 돋움은 변함없이 옛한글을 보여주지 못하고 있습니다. 또한 보통 글씨에서 옛한글을 잘 보여주던 은 돋움도 옛한글을 보여주지 못하고 있습니다. 현재 은 돋움 글꼴이 아까보다는 확실히 굵게 보이고 있습니다.

글꼴 실험 3 - 볼드 글꼴 지우기

은 돋움 글꼴은 굵은 글씨에 해당하는 볼드 글꼴이 따로 있습니다. 은 돋움 글꼴은 UnDotum.ttf 파일이며, 은 돋움 글꼴의 굵은 글씨는 굵은 은 돋움 글꼴이 담당하는데, UnDotumBold.ttf 파일입니다. 이 파일이 있다면 은 돋움 글꼴에 볼드 속성을 요청하면, 이 파일에서 읽어오게 됩니다. 개인적으로 이 굵은 은 돋움 글꼴은 너무 굵어서 좋아하지 않습니다. 정확히 말하면, 너무 굵어서 읽기 힘든 면이 있기 때문에 싫어합니다.
하지만 이번에는 굵기 때문에 제목에 넣었는데 오히려 옛한글을 제대로 나타내지 못하니 환장할 노릇이지요.

아무튼 이번에 이 글꼴 파일을 제거한 뒤 다시 부팅하겠습니다. 뭐, 글꼴 캐시만 지우고 웹브라우저를 다시 시작하면 되지만, 확실히 하기 위해 다시 부팅했습니다.

파이어폭스에서 본 옛한글 굵은 글씨 (글꼴 없음)

파이어폭스에서 본 옛한글 굵은 글씨 (글꼴 파일 없음)

정확한 글꼴 파일 없이 자체적으로 볼드 속성을 구현한 경우에는 제대로 나타나고 있습니다. 그렇다면 범인은 굵은 은 돋움 글꼴인가 봅니다.

글꼴 실험 4 - 다른 은 글꼴

이번에는 은 바탕이나 은 돋움 이외의 글꼴도 포함하여 살펴보겠습니다. 편의상 편집하여 표시하겠습니다. 양해 바랍니다.

은 바탕 글꼴이 지원하는 유니코드 영역의 일부

은 바탕 글꼴이 지원하는 유니코드 영역의 일부

위 그림은 은 바탕 글꼴이 지원하는 유니코드 영역(Supported Unicode Blocks)의 일부입니다. 위 그림에서 빨간 네모 테두리를 두른 곳을 살펴보면, 하나는 한글 자모 영역이며, 다른 하나는 호환용 한글 자모입니다. 이 가운데 한글 자모 영역이 있는 글꼴을 테스트하려고 했는데, 모든 은 글꼴에서 자모 영역을 발견하였고, 그에 따라 모든 은 글꼴을 대상으로 삼았습니다.

[code html] <div style="font-size: 1.4em; font-height: 100%; font-weight:normal;"> <p>font-weight:normal;</p> <p>한글 자모 영역(U+1100~U+11FF)을 이용한 합자 테스트</p> <p style="font-family: '은 바탕';">은 바탕 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '굵은 은 바탕';">굵은 은 바탕 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 봄';">은 봄 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 디나루';">은 디나루 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '굵은 은 디나루';">굵은 은 디나루 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '가는 은 디나루';">가는 은 디나루 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 돋움';">은 돋움 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '굵은 은 돋움';">굵은 은 돋움 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 그래픽';">은 그래픽 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '굵은 은 그래픽';">굵은 은 그래픽 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 궁서';">은 궁서 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 바탕';">은 자모 바탕 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 돋움';">은 자모 돋움 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 노벨';">은 자모 노벨 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 소라';">은 자모 소라 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 펜';">은 자모 펜 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 펜흘림';">은 자모 펜흘림 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 필기';">은 자모 필기 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 자모 필기a';">은 자모 필기a : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '굵은 은 자모 필기';">굵은 은 자모 필기 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 신문';">은 신문 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 타자';">은 타자 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 바다';">은 바다 : &#x1112;&#x119E;&#x11AB;</p> <p style="font-family: '은 옛글';">은 옛글 : &#x1112;&#x119E;&#x11AB;</p> </div> [/code]

테스트 결과는 다음과 같습니다.

모든 은 글꼴의 옛한글 합자 지원 테스트 결과

모든 은 글꼴의 옛한글 합자 지원 테스트 결과

옛한글 합자를 지원하는 글꼴만 따로 모으면 다음과 같습니다.

옛한글 합자를 지원하는 은 글꼴 모음

옛한글 합자를 지원하는 은 글꼴 모음

벌레의 원인

이 벌레에 대해서는 원인을 알지 못합니다. 저는 글꼴의 내부 구조에 대해 아는 바가 전혀 없기 때문입니다.

비슷한 벌레

글꼴 및 화면 표시와 관련한 버그는 다음과 같은 것이 있습니다.

관련 문서

내부 문서

외부 문서

이 글은 스프링노트에서 작성되었습니다.


글쓴이는 koc/SALM입니다.
본문에 저작권에 대한 사항이 나타나지 않거나, 저작권이 BY-SA로 표기되어 있다면,
이 글은 GFDL로 공개한 글입니다.

카테고리

분류 전체보기 (1005)
스크립트 (22)
벌레와 팁 (126)
소프트웨어 (240)
하드웨어 (6)
이야기 (24)
말의 나무 (506)
미쳐보자 (22)
일기 (48)
아이폰 (10)

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

달력

«   2024/03   »
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

글 보관함