파일 이름 인코딩이 어떻게 작동하는지 이해하기가 어렵습니다. 유닉스 SE에서 모순되는 설명을 발견했습니다.
파일 이름은 문자로 저장됩니다
다른 대답을 인용하려면 : Linux의 파일 시스템 문자 인코딩에 대한 몇 가지 질문
[…] 질문에서 언급했듯이 UNIX 파일 이름은 일련의 문자 일뿐입니다. 커널은 인코딩에 대해 전혀 알지 못하며 이는 완전히 사용자 공간 개념입니다.
파일 이름이 문자로 저장되는 경우 마지막으로 파일 이름이 디스크에서 비트 또는 바이트 시퀀스로 끝나야하므로 일종의 인코딩이 필요합니다. 사용자가 선택할 수 있다면 어떤 커널에 공급되는 바이트 순서로 문자를 매핑하는 인코딩을, 그것을 만들 수 있는 유효한 파일 이름에 대한 바이트 순서를.
다음을 가정하십시오. 사용자는 랜덤 인코딩 X를 사용 하여 파일 foo
을 바이트 시퀀스 α 로 변환하여 디스크에 저장합니다. 다른 사용자는 Y 인코딩을 사용합니다 . 이 인코딩에서 α는로 변환되며 /
파일 이름으로 허용되지 않습니다. 그러나 첫 번째 사용자에게는 파일이 유효합니다.
이 시나리오는 발생할 수 없다고 가정합니다.
파일 이름은 이진 Blob으로 저장됩니다
다른 대답을 인용하자면 : Linux에서 파일 이름과 경로에 어떤 문자 세트 인코딩이 사용됩니까?
다른 사람들이 지적했듯이 실제로 이에 대한 대답은 없습니다. 파일 이름과 경로에는 인코딩이 없습니다. OS는 일련의 바이트 만 처리합니다. 개별 응용 프로그램은 어떤 식 으로든 인코딩 된 것으로 해석하도록 선택할 수 있지만 이는 다양합니다.
시스템이 문자를 처리하지 않는 경우 파일 이름에서 특정 문자 (예 : /
또는 NULL
)를 어떻게 금지 할 수 있습니까? /
인코딩 이없는의 개념은 없습니다 .
파일 시스템은 임의의
문자를 포함 하는 파일 이름을 저장할 수 있으며 유효하지 않은 문자를 포함하는 파일 이름을 질식시키는 인코딩을 고려하는 사용자 프로그램 일뿐입니다. 이는 파일 시스템과 커널이 어려움없이을 포함하는 파일 이름을 처리 할 수 있음을 의미합니다 /
.
또한 이것이 잘못되었다고 가정합니다.
인코딩은 어디에서 발생하며 특정 문자를 허용하지 않는 제한은 어디에 있습니까?