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