특정 문자 인코딩을 사용할 때 어떤 글꼴 기호가 표시되는지 어떻게 결정됩니까?


0

텍스트가 화면에 표시되는 방법에 대한 모든 것을 이해하려고합니다. 일을 간단하게하기 위해 싱글 바이트 인코딩 (유니 코드 없음)을 사용합니다.

내 디스크에는 0에서 255 사이의 값을 갖는 일련의 바이트가 있습니다. 그런 다음 컴퓨터 프로그램에이 바이트를 표시하는 데 사용해야하는 문자 인코딩을 알릴 수 있습니다. ISO-8859-1을 사용할 수 있습니다. 예를 들어 값 0xA4가있는 바이트는 도트 (¤)와 함께 사용됩니다. 또는 ISO-8859-15로 전환 할 수 있습니다. 값이 0xA4 인 내 바이트는 유로 기호 (€)로 정의됩니다.

이것은 모두 이해하기가 쉽습니다. 그러나 문자 인코딩을 변경하는 것과 마찬가지로 기호의 정확한 모양을 정의하기 위해 글꼴을 변경할 수도 있습니다. 이제 글꼴은 모든 문자 인코딩. 따라서 글꼴에는 ¤ 및 € 두 기호가 있어야합니다.

따라서 내 화면에 텍스트를 가져 오는 단계는 분명히 다음과 같습니다.

  1. 직렬로 바이트 순서 읽기
  2. 현재 바이트의 숫자 값을 사용하여 문자 인코딩 테이블을 조회합니다.
  3. [something]을 사용하여 글꼴 파일을 검색하여 2 단계에서 찾은 정확한 모양의 심볼을 얻습니다.
  4. 글꼴 파일에 정의 된 것과 같은 기호 그리기

3 단계에서 문자 인코딩을 글꼴로 매핑하는 데 사용되는 "무언가"는 무엇입니까? 글꼴 파일은 문자 인코딩에 의존합니까? 따라서 폰트에는 (의사 코드)처럼 작동하는 내장 된 "이중 스위치"메커니즘이 있습니다.

get_symbol(code, encoding) {
  switch code{
    case 0xA4: switch(encoding) {
      case 'ISO-8859-1' : return '¤';
      case 'ISO-8859-15': return '€';
    }
  }
}

?

주어진 바이트 순서와 주어진 문자 인코딩을 글꼴의 실제 기호로 가져 오는 방법에 대한 자세한 내용은 무엇입니까? 이 매핑은 항상 올바른 기호를 제공하기 위해 어떻게 매핑됩니까?

답변:


2

글꼴 파일은 특정 인코딩을 표시하도록 설계되었습니다. 주어진 글꼴을 사용하는 프로그램은 값이 n 주어진 문자 인코딩에서 해당 글립 번호를 렌더링하여 표시됩니다. n.

폰트 파일은 주어진 문자 인코딩의 가능한 모든 값에 대해 글리프가있을 필요가 없습니다 (유니 코드의 경우 글꼴이 전체 범위를 차지하는 경우는 드뭅니다). 또한 인코딩의 첫 번째 값으로 시작하지 않아도됩니다 (일반적으로 제어 문자는 생략됩니다) . 시작점, 끝점 및 글꼴 파일 크기를 관리 가능한 상태로 유지하는 데 사용되는 생략 된 글리프를 지정하기위한 다양한 파일 형식 체계가 있습니다.

주어진 예제에서 OP는 X Window 시스템을 사용하는 것 같습니다. 사용되는 파일 형식이 두 가지 이상이며 액세스 방식도 다릅니다. 주요한 것들은 XLFD (이전) 및 fontconfig (최신). 다른 시스템 (Microsoft Windows)에서는 다른 API가 사용됩니다 ( LOGFONT 구조가 좋은 출발점이다). OSX는 자체 API ( CoreText ).

물론 그래픽 인터페이스를위한 것입니다. 글꼴은 그보다 훨씬 광범위하게 적용 할 수 있습니다. 예를 들어 리눅스와 BSD는 서로 다른 콘솔 폰트를 지정할 수있게 해준다 - 인코딩 외에도 사용할 수있는 글리프의 수에 제한이 따른다. 그 (것)들을위한 약간 유용한 연결은 여기있다 :


0

텍스트를 그리는 응용 프로그램은 사용중인 텍스트 그리기 API에 글꼴을 지정하거나 지정하지 않으면 시스템 기본 글꼴이 사용됩니다.

유니 코드 기반의 텍스트 그리기 시스템은 지정된 글꼴에 요청 된 글리프가없는 경우 특정 글리프가 들어있는 글꼴을 찾기 위해 글꼴 대체 알고리즘을 사용하는 경우가 많습니다. 그러나 유니 코드 이전 시스템은 일반적으로 글리프를 그리거나 "누락 된 글리프"글리프를 그려 내지 못합니다. 심지어 유니 코드 기반 시스템조차도 "누락 된 문자 모양"기호를 그립니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.