명령 없이 일반 텍스트 파일을 ASCII에서 유니코드로 변환

명령 없이 일반 텍스트 파일을 ASCII에서 유니코드로 변환

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" 에코 라인을 추가하는 경우 fileutf-8로 인코딩된 문자를 읽지 않기 때문에 여전히 ASCII로 인코딩된 파일로 보고됩니다.

임계값은 100Kb에 가깝습니다.

관련 정보