그리스어로 일부 텍스트 출력 형식을 지정하려면 fmt를 사용해야 하지만 라틴 문자와 동일하게 동작하지 않습니다. 예를 들어, 다음 15자 문장을 생각해 보세요.
라틴 문자의 경우:
$echo "Have a nice day" | fmt -w 16
Have a nice day
그러나 이상하게도 비라틴어 문자의 경우:
$echo "Ηαωε α νιψε δαυ" | fmt -w 16
Ηαωε α
νιψε δαυ
실제로 위 문자열의 경우 개행 없이 인쇄되는 최소값은 다음과 같습니다 -w 28
.
$echo "Ηαωε α νιψε δαυ" | fmt -w 28
Ηαωε α νιψε δαυ
$echo "Ηαωε α νιψε δαυ" | fmt -w 27
Ηαωε α νιψε
δαυ
이런 일이 발생하는 이유와 해결 방법(가능한 경우)을 설명할 수 있는 사람이 있습니까?
답변1
귀하의 질문에 대답하자면, 그리스 문자는 라틴어가 아닌 문자, 유니코드 문자 및 다음과 같은 이유로 작동하지 않습니다.
같지 않은기준, fmt는 유니코드를 지원하지 않습니다.
https://en.wikipedia.org/wiki/Fmt
보충 설명
안타깝게도 질문의 두 번째 부분은 이를 수행하는 방법에 관한 것입니다.
최근에는 Heninger, Unicode Line Breaking Algorithm, 2015-06-01 등 유니코드를 래핑하는 방법에 대한 기술 보고서가 있는 것 같습니다.http://www.unicode.org/reports/tr14/그러나 이는 단지 사양일 뿐 실제 구현이나 소프트웨어 운영 사례에 대한 언급은 없는 것으로 보입니다. 나열된 이메일을 통해 작성자에게 문의할 수 있습니다.
Wikipedia 기사에 fmt
가 언급되어 par
있고 를 통해 사용할 수 있으므로 apt-get
귀하가 게시한 텍스트에서 이를 시험해 보기로 결정했습니다.
하지만 성공하지 못했습니다. 여전히 원하는 방식으로 마무리되지 않습니다.
$ echo "Ηαωε α νιψε δαυ" | par 16gr
Ηαωε α
νιψε δαυ
이 man
페이지는 매우 어렵고 작성자도 다음과 같이 경고합니다. not well-written for the end-user
하지만 결심이 섰다면 읽어볼 수 있습니다.
답변2
fmt
따라서 "라틴어가 아닌" 언어(예: 아마도 UTF-8)는 일반적으로 지원되지 않습니다. 를 사용할 수도 있습니다 par
. 그렇게 합니다.
흥미롭게도 Solaris와 FreeBSD 매뉴얼 페이지는 fmt
매우 유사하여 1980년대 중반 이후로 프로그램이 크게 개선되지 않았음을 나타냅니다.
par
이는 귀하의 시스템에 대한 소프트웨어 패키지로 제공될 수 있습니다. 그렇지 않은 경우 여기에서 쉽게 컴파일할 수 있습니다.
반면에,적절한par
UTF-8 지원 부족:
- Re: textproc/par에 UTF-8 지원을 추가합니다.이러한 개선 사항을 통합하는 데 따른 문제가 설명됩니다.
- 데비안 버그 보고서 로그 - #310495 par: UTF-8 멀티바이트 문자를 제대로 처리할 수 없습니다.오픈한지 좀 됐는데