ASCII로 인코딩된 파일이 UTF-8로 확장되거나 반대로 ASCII로 축소되는 이유는 무엇입니까?
user:~$ echo 'A B C | } ~' > ./file
user:~$
user:~$ file --brief --mime ./file
text/plain; charset=us-ascii
user:~$
user:~$
user:~$ echo 'ᴁ ♫ ⼌
답변1
"인코딩"과 "문자 집합"을 혼동하신 것 같습니다.
첫 번째 경우 파일에는 US-ASCII 문자만 포함됩니다. 즉, 파일을 표시하는 데 사용하는 언어 설정에 관계없이 파일은 동일하게 보입니다.
두 번째 경우에는 UTF8 문자 세트에 속하는 문자가 파일에 포함됩니다. 왜냐하면 UTF8 문자 세트에 해당 문자를 입력했기 때문입니다.
여기서는 변환이 발생하지 않습니다. 명령은 단순히 파일의 내용을 알려줍니다.
답변2
이 file
명령은 구문 분석한 파일의 내용을 추측합니다. 때로는 다단계 프로세스로 파일 헤더에서 특정 바이트 수를 읽어 분석을 수행합니다(처음에 명확한 표시가 있는 경우). 구조화되지 않은 텍스트 파일에서는 확장자보다 확실히 더 많은 문자를 읽으므로 ./file
모두 구문 분석합니다.
두 번째 예에서는 일부 utf-8 문자를 파일에 넣고 이를 기반으로 file
파일이 문자 세트를 사용하게 됩니다 utf-8
. 예를 들어, ASCII 문자만 포함된 900Kb 파일이 있고 "utf-8" 에코 라인을 추가하는 경우 file
utf-8로 인코딩된 문자를 읽지 않기 때문에 여전히 ASCII로 인코딩된 파일로 보고됩니다.
임계값은 100Kb에 가깝습니다.