Unix 기반 운영 체제에서 UTF-8 파일 이름이 허용됩니까? 그렇다면 파일을 디스크에 쓰기 위해 특별한 작업을 수행해야 합니까?
내가 무엇을 하고 싶은지 설명하겠습니다. FTP를 통해 원격 시스템으로 파일을 전송하는 애플리케이션을 작성 중인데 파일 이름이 UTF-8 형식일 수 있는 일부 메타데이터 세트를 통해 동적으로 설정됩니다. Unix/Linux에서 디스크에 파일을 쓰려면 뭔가를 해야 하는지 궁금합니다.
또한 후속 조치로 UTF-8을 지원하지 않는 시스템에 UTF-8 파일 이름을 업로드하면 어떻게 되는지 아는 사람이 있습니까?
답변1
Unix/Linux에서 파일 이름은 슬래시나 NUL을 제외한 모든 바이트 시퀀스입니다. 슬래시는 경로 구성 요소를 구분하고 NUL은 경로 이름을 종료합니다.
따라서 원하는 파일 이름 인코딩을 사용할 수 있습니다. 일부 응용 프로그램은 파일 이름에 어떤 문자가 있는지 모르는 경우 특정 인코딩에 문제가 있을 수 있습니다. 예를 들어 잘못 작성된 쉘 스크립트는 종종 공백이 있는 파일 이름을 처리하지 않습니다.
최신 Unix/Linux 환경은 UTF-8로 인코딩된 파일 이름을 잘 처리합니다.
답변2
내부적으로 대부분의 파일 시스템은 바이트를 저장합니다. 파일 시스템 드라이버는 바이트가 무엇을 의미하는지 신경 쓰지 않습니다. Linux 및 대부분의 기타 최신 UNICE의 범용 파일 시스템 드라이버는 /
파일 이름에 null 바이트를 제외한 모든 바이트를 허용합니다.
일부 파일 시스템에는 인코딩 제한이 있을 수 있습니다. 일반적으로 FAT 또는 NTFS와 같은 비기본 파일 시스템입니다. 일부 네트워크 파일 시스템(예: Samba)은 서버와 클라이언트 인코딩 간에 변환할 수 있으므로 서버와 클라이언트 구성이 일치하는지 확인해야 합니다.
관례적으로 파일 이름을 구성하는 바이트는 대부분의 시스템에서 UTF-8로 해석됩니다. FTP를 통해 이름을 전송하는 애플리케이션과 같이 파일 이름을 문자로 해석하는 애플리케이션을 실행하는 경우 파일 이름이 UTF-8로 인코딩되었음을 알리도록 애플리케이션을 구성해야 할 수도 있습니다. 많은 명령줄 응용 프로그램의 경우 환경을 LC_CTYPE
UTF-8 로케일로 설정하면 이 문제가 해결됩니다.en_US.UTF-8
UTF-8을 지원하지 않는 시스템에 파일을 저장해도 상관없습니다. 바이트는 변경되지 않습니다. 파일 이름을 구성하는 문자를 표시할 수 없지만 UTF-8을 지원하는 시스템에 파일을 다시 복사하면 동일한 바이트가 여전히 UTF-8 문자로 나타납니다.
자신만의 애플리케이션을 작성하는 경우 가능하면 저장 및 전송을 위해 내부적으로 UTF-8을 사용하는 것이 좋습니다.