우분투와 같은 리눅스에서는 파일이름에도 UTF-8을 사용할 수 있는데 윈도우는 UTF-8파일 이름을 지원하지 않는다. macOS에서는 문서내용에는 일반적인 유니코드를 쓰지만, 파일시스템에는 Unicode NFD를 쓴다.
BOM (Byte Order Mark)은 '바이트 순서 표시'이다.
유니코드가 little-endian 인지 big-endian 인지 아니면 UTF-8 인지 쉽게 알 수 있도록, 유니코드 파일이 시작되는 첫부분에 보이지 않게, 2~3바이트의 문자열을 추가하는데 이것을 BOM이라고 함. 텍스트 에디터 화면에서는 보이지 않고, 헥사 에디터(Hex Editor)*로 열었을 때만 보임.
Code | BOM |
---|---|
UTF-8 | EF BB BF |
UTF-16(little-endian) | FF FE |
UTF-16(big-endian) | FE FF |
UTF-8 코드는 원래 그 자체로 구별이 가능하기 때문에 괜히 BOM이 필요없다. 그래서, UTF-8에는 BOM이 없는 것이 보통인데, 오래된 프로그램은 BOM이 있는 UTF-8 파일을 읽을 때 오작동할 수 있다.
윈도우의 메모장에서 UTF-8 로 저장을 하면 항상 BOM을 붙인다. 그런데 인터넷에 올려서 리눅스 서버에서 사용될 HTML/CSS/XML 파일을 UTF-8로 작성할 때에는 BOM이 있으면 문제가 생길 수 있다.
MS윈도에서 내부적으로 사용되는 유니코드(UTF-16LE)는 16비트 즉 2바이트로 하나의 글자를 표현함. 바이트가 2개니까 이 바이트에 순서가 정해져 있어야 함. big-endian 은 있는 순서 그대로 바이트를 자연스럽게 나열하는 것이고, little-endian 은 속도를 빠르게 하기 위해서 거꾸로 나열하는 것임. MS윈도의 유니코드는 리틀 엔디안 little-endian이 기본값임. 빅 엔디안 유니코드는, 울트라에디터 v11 등의 일부 프로그램에서 전혀 인식하지 못했었다.