posix는 어떤 문자 인코딩을 지원합니까? 다음과 같은 도구의 동작을 정의 grep, awk,

POSIX는 다음과 같은 도구의 동작을 정의 grep, awk, sed, 등을 텍스트 파일에 대한 작동하는. 텍스트 파일이기 때문에 문자 인코딩에 문제가 있다고 생각합니다.

질문:

  • POSIX가 지원하는 문자 인코딩은 무엇입니까? (또는 POSIX 호환 시스템에서 어떤 인코딩의 텍스트 파일을 처리 할 수 ​​있습니까?)


답변

POSIX에서 지정한 특정 문자 인코딩이 없습니다. 고정 위치의 유일한 문자는 null이며 00이어야합니다.

POSIX에 필요한 것은 휴대용 문자 세트의 모든 문자가 존재 한다는 것 입니다. 휴대용 문자 세트에는 인쇄 가능한 ASCII 문자, 공백, BEL, 백 스페이스, 탭, 캐리지 리턴, 줄 바꾸기, 세로 탭, 용지 공급 및 널이 포함됩니다. 다음을 제외하고는 인코딩 위치 또는 방법이 지정되지 않았습니다.

  • 이들은 모두 단일 바이트 (8 비트)입니다.
  • 널은 모든 비트가 0으로 표시됩니다.
  • 숫자 0-9는 순서대로 연속적으로 나타납니다.

문자 표현에는 다른 제한이 없으므로, 순응 시스템은 해당 문자와 ​​다른 문자를 포함한 모든 인코딩을 자유롭게 지원합니다.

동일한 시스템에서 다른 로케일을 제외하고, 이러한 문자의 서로 다른 표현을 가질 수 ./, 그리고

응용 프로그램에서 문자 인코딩이 다른 로캘 쌍을 사용하거나 응용 프로그램에서 사용하는 로캘과 다른 인코딩을 가진 로캘을 사용하여 응용 프로그램의 데이터에 액세스하는 경우 결과가 지정되지 않습니다.

모든 POSIX 호환 시스템이 동일한 방식으로 처리해야하는 유일한 파일은 전적으로 널 바이트로 구성된 파일입니다. 텍스트로 취급되는 파일 은 PCS의 개행 문자의 인코딩 표현에 의해 행이 종료됩니다 .


답변

POSIX 표준은 POSIX 로케일을 소개합니다.이 로케일은 ASCII 문자의 ASCII 문자 세트와 동일한 순서를 갖습니다 (POSIX 기본 정의 §7.3.2).

또한 기호 상수 POSIX2_LOCALEDEF가 정의 된 시스템 (XSI 호환 시스템에 대해 정의되고을 통해 테스트 할 수 getconf POSIX2_LOCALEDEF있는 시스템) localedef에서 POSIX Base에 지정된대로 유틸리티 및 로케일 정의를 사용하여 새 로케일 작성을 지원합니다. 정의 §7.3.

POSIX 로케일 정의는 유니 코드 값으로 문자 지정을 지원하지 않으며 ISO / IEC TR 14652 ( ISO / IEC JTC1 / SC22 / WG20 홈에서 사용 가능 ) 및 ISO TR 30112 (초안에서 사용 가능) 와 같은 새로운 표준이 있습니다. ISO / IEC TR 14652를 폐기하는 ISO / IEC JTC1 / SC35 / WG5 홈 ).

다른 관련 표준은 ISO 14651 ( ISO ITTF 사이트 에서 사용 가능 ) 및 Unicode Collation Algorithm (UCA, Unicode UTS # 10) 입니다.

CPAN 의 Unicode :: Tussle Perl 모듈에는 여러 Unix 유틸리티의 유니 코드 재 작성이 포함되어 있습니다. sed 및 awk 스크립트와 one-liner는 유니 코드 지원을 위해 Perl에서 비교적 쉽게 재 작성할 수 있습니다.

glibc의 경우 localedata 구성 요소에 대한 bugzilla 항목 은 다른 로캘의 상태를 볼 수 있습니다.