악센트 부호가있는 문자 및 터미널 리디렉션


3

터미널의 파일 이름에 악센트 부호가있는 문자를 처리하는 데 문제가 있습니다. 다음을 고려하세요:

$ touch leão.png
$ ls > test.txt
$ open -a TextWrangler test.txt

TextWrangler screen shot

에있는 악센트 부호가있는 문자 test.txt 잘못된 것입니다. 다음은 관련성이있는 몇 가지 사실입니다.

  • 터미널을 기본 설정으로 사용하고 있습니다. 문자 인코딩은 UTF-8로 설정되고 "시작할 때 로켈 환경 변수 설정"이 선택됩니다.
  • ~의 출력 locale 껍질에 :

    LANG="en_US.UTF-8"
    LC_COLLATE="en_US.UTF-8"
    LC_CTYPE="en_US.UTF-8"
    LC_MESSAGES="en_US.UTF-8"
    LC_MONETARY="en_US.UTF-8"
    LC_NUMERIC="en_US.UTF-8"
    LC_TIME="en_US.UTF-8"
    LC_ALL="en_US.UTF-8"
    
  • TextWrangler의 기본 인코딩은 UTF-8입니다. 다른 인코딩으로 파일을 다시 열려고하면 문제가 악화됩니다.

  • OS 10.6.8을 실행 중입니다.

최신 정보

의견에 대한 답변으로 다음과 같은 추가 정보가 있습니다.

  • 의 출력 od -tx1 test.txt :

    0000000    6c  65  61  cc  83  6f  2e  70  6e  67  0a  74  65  73  74  2e
    0000020    74  78  74  0a                                                
    0000024
    
  • 만약 내가한다면 echo leão.png > test2.txt TextWrangler에서 텍스트가 올바르게 표시됩니다.
  • 열리는 test.txt 텍스트 편집기에서 다음을 표시합니다. leaÃÉo.png
  • 열리는 test.txt jEdit에서 다음을 표시합니다. leaÃÉo.png
  • 열리는 test.txt AlphaX 디스플레이 : leaÃÉo.png
  • 열리는 test.txt ...에서 emacs ...에서 이내에 터미널 디스플레이 : leão.png

쉘에서 비 ASCII 파일 이름으로 작업 할 수 있기를 정말로 원합니다. 어떻게 작동시킬 수 있습니까?


다음의 결과는 무엇입니까? od -tx1 test.txt? 텍스트 랭글러에서 무엇을 볼 수 있습니까? echo leão >test2.txt? 열면 무엇을 볼 수 있습니까? test.txt 다른 편집자의 경우?
Gilles

@ 질료 귀하의 질문에 감사드립니다. 질문에 대한 답변을 추가했습니다.
Alan Munn

FWIW, OS X Lion에서 이것을 재현 할 수 없습니다. 악센트 부호가있는 문자가 올바르게 작동하는 것 같습니다.

답변:


2

나는 당신의 문제를 완전히 해결하지 못할 수도 있지만, 어떤 일이 일어나고 있는지 설명 할 수 있습니다. 셸이 올바르게 작동하고 있습니다. TextWrangler는 약간 고급 요구 사항을 제대로 처리하지 못합니다.

에서 test.txt, 당신은 a (정원 종류 소문자 A) 다음에 a 결합하다 물결표 유니 코드 문자 U + 0303). 문자 결합은 문자를 액센트로 일반화합니다. 모든 의도와 목적을 위해, ã (U + 0061 라틴 소문자 A 다음에 U + 0303 COMBINING TILDE 표시) 동등한 ã (U + 00E3 라틴 소문자와 틸드).

아마도 유니 코드가 지금 발명 되었다면 문자 결합 만 존재할 것이며, 우리는 항상 a; 그러나 유니 코드는 기존의 기존 인코딩과의 호환성을 위해 많은 문자를 가지고 있습니다. 거의 모든 사람들이 사용하는 문자이기 때문에 많은 프로그램이 문자 조합을 지원하지 않습니다. 특히, TextWrangler가 텍스트 랭글러가 전혀 지원하지 않는 것처럼 보입니다. 대신 "나는 이것이 무엇인지 모릅니다"라고 표시됩니다.

일반적으로 말해서, OSX는 분해 된 문자를 선호합니다. (즉, 문자 + 결합 악센트). 특히, 내가 아는 한 모든 파일 이름이이 형식으로 정규화됩니다. 파일 이름을 정규화하면 (즉, 파일 이름에 여러 가지 가능한 형식이있는 경우 항상 특정 파일 형식이 사용됨을 확인하면 찾을 수 없으므로 매우 유용합니다.) leão.png 당신이 찾고있을 때 leão.png. (둘 사이에 차이점이 보이지 않습니까? 좋습니다, 브라우저가 문자 결합을 올바르게 처리합니다.)

이상적인 솔루션은 문자 조합을 올바르게 처리하는 편집기를 사용하는 것입니다. TextWrangler를 고수하고 싶다면 최신 버전을 가지고 있는지 확인하십시오. 지원을 원하시면 작성자에게 문의하십시오. TextEdit, jEdit 또는 AlphaX를 사용하면 파일을 다음과 같이 표시하고 있습니다. 맥 로마 대신에 UTF-8 ; UTF-8로 전환하십시오.


설명을 해주셔서 대단히 감사합니다. 당신은 다른 편집자들에 대해 절대적으로 옳았습니다. TextWrangler가이 문제에 대해 매우 의구심을 품은 것처럼 보였으므로 더 조사하여 문제가 완전히 어리 석다는 것을 발견했습니다. TextWrangler에서 "Show insvisibles"를 체크하고 문제를 해결했을 때 문제가 사라졌습니다. 이름 : 어쨌든 귀하의 답변을 동의 거 야! 감사.
Alan Munn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.