
저는 텍스트가 화면에 표시되는 방식에 대한 전체 이야기를 이해하려고 노력하고 있습니다. 작업을 단순하게 유지하기 위해 단일 바이트 인코딩(유니코드 없음)을 사용합니다.
내 디스크에는 각각 0에서 255 사이의 값을 갖는 일련의 바이트가 있습니다. 그런 다음 컴퓨터 프로그램에 이러한 바이트를 표시하는 데 사용해야 하는 문자 인코딩을 알려줄 수 있습니다. 예를 들어 값이 0xA4인 바이트가 점(¤)이 있는 원인 경우 ISO-8859-1을 사용할 수 있습니다. 또는 ISO-8859-15로 전환하면 값이 0xA4인 바이트가 유로 기호(€)로 정의됩니다.
이 모든 것은 여전히 이해하기 쉽습니다. 그러나 문자 인코딩을 변경하는 것과 병행하여 글꼴을 변경하여 기호의 정확한 모양을 정의할 수도 있습니다. 이제 글꼴은 다음과 함께 작동하도록 되어 있습니다.모두문자 인코딩. 따라서 글꼴에는 ¤ 및 € 기호가 모두 있어야 합니다.
따라서 내 화면에 텍스트를 표시하는 단계는 다음과 같습니다.
- 바이트 시퀀스를 직렬로 읽기
- 현재 바이트의 숫자 값을 사용하여 문자 인코딩 테이블을 조회합니다.
- 2단계에서 찾은 기호의 정확한 모양을 얻으려면 [something]을 사용하여 글꼴 파일을 검색하세요.
- 글꼴 파일에 정의된 대로 기호 그리기
3단계에서 문자 인코딩을 글꼴에 매핑하는 데 사용되는 "무언가"는 무엇입니까? 글꼴 파일은 문자 인코딩에 의존합니까? 따라서 글꼴에는 다음과 같이 작동하는 "이중 스위치" 메커니즘이 내장되어 있습니까? (의사 코드)
get_symbol(code, encoding) {
switch code{
case 0xA4: switch(encoding) {
case 'ISO-8859-1' : return '¤';
case 'ISO-8859-15': return '€';
}
}
}
?
주어진 바이트 시퀀스와 주어진 문자 인코딩을 글꼴의 실제 기호로 가져오는 방법에 대한 자세한 내용은 무엇입니까? 항상 올바른 기호를 제공하기 위해 이것이 어떻게 매핑됩니까?
답변1
글꼴 파일은 특정 인코딩을 표시하도록 설계되었습니다. 주어진 글꼴을 사용하는 프로그램은 n
주어진 인코딩의 값이 해당 문자 번호를 렌더링하여 표시된다고 가정해야 합니다 n
.
글꼴 파일에는 주어진 문자 인코딩의 가능한 모든 값에 대한 글리프가 필요하지 않으며(유니코드의 경우 글꼴이 전체 범위를 포괄하는 경우는 드뭅니다) 인코딩의 첫 번째 값으로 시작할 필요도 없습니다(일반적으로 제어 문자는 생략됩니다) . 글꼴 파일 크기를 관리하기 쉽게 유지하는 데 사용되는 시작점, 끝점 및 생략된 글리프를 지정하는 다양한 파일 형식 구성표가 있습니다.
주어진 예에서 OP는 X Window 시스템을 사용하고 있을 가능성이 높습니다. 두 가지 이상의 파일 형식이 사용되며 그에 따라 액세스되는 다양한 방법이 있습니다. 주요한 것들은XLFD(이전) 그리고글꼴 구성(최신). 다른 시스템(Microsoft Windows)에서는 다른 API가 사용됩니다(LOGFONT
구조가 좋은 출발점입니다). OSX는 자체 API(코어텍스트).
물론 그래픽 인터페이스용입니다. 글꼴은 그보다 더 광범위하게 적용 가능합니다. 예를 들어, Linux와 BSD에서는 다양한 콘솔 글꼴을 지정할 수 있습니다. 이는 인코딩 외에도 사용할 수 있는 문자 수에 제한이 있습니다. 다음은 이에 대한 몇 가지 유용한 링크입니다.
답변2
텍스트를 그리는 앱은 사용 중인 텍스트 그리기 API에서 글꼴을 지정하며, 지정하지 않으면 시스템 기본 글꼴이 사용됩니다.
유니코드 기반 텍스트 그리기 시스템에는 지정된 글꼴에 요청된 문자가 없는 경우 특정 문자가 포함된 글꼴을 찾는 글꼴 대체 알고리즘이 있는 경우가 많습니다. 그러나 유니코드 이전 시스템은 일반적으로 문자 모양을 그리거나 "누락된 문자 모양" 문자를 그리는 데 실패합니다. 유니코드 기반 시스템에서도 "누락된 문자 모양" 기호가 표시되는 경우가 있습니다.