파일 형식을 원하고 있으며 올바르게하고 싶습니다. 이진 형식이므로 파일의 첫 번째 바이트 (또는 바이트)가 유효한 텍스트 문자를 구성 해서는 안됩니다 (PNG 파일 헤더 1에서와 동일 ). 이를 통해 형식을 인식하지 못하는 도구는 처음 몇 바이트를보고 여전히 텍스트 파일이 아님을 확인할 수 있습니다.
위의 모든 코드 포인트 0x7F
는 유효하지 않은 US-ASCII이므로 쉽게 사용할 수 있습니다. 그러나 유니 코드의 경우 완전히 다른 이야기입니다. 유니 코드 개인 사용 문자 , 비 문자 및 센티넬 FAQ 에서 찾은 유효한 유니 코드 문자 외에도 개인용 문자 , 문자가 아닌 문자 및 센티넬이 있습니다.
파일의 시작 부분에서 유효하지 않은 US-ASCII, UTF-8, UTF-16LE 및 UTF-16BE를 초래할 수있는 센티넬 바이트 시퀀스는 무엇입니까?
- 분명히 첫 번째 바이트는
0x80
유효한 US-ASCII (제어) 문자이므로 아래 값을 가질0x00
수 없으므로 사용할 수 없습니다. - 또한 개인용 문자 는 유효한 유니 코드 문자이므로 해당 코드 포인트도 사용할 수 없습니다.
- 리틀 엔디안 및 빅 엔디안 UTF-16 모두에서 작동해야하므로 리버스 가 유효한 유니 코드 문자이므로 이와 같은 비 문자
0xFFFE
도 불가능합니다0xFEFF
. - 위에서 언급 한 FAQ는 문자가 아닌 문자 를 사용하지 않는 것이 좋습니다 . 유효 하지 않은 문자 는 여전히 유효한 유니 코드 시퀀스를 초래하므로
0xFFFF
그림과는 다릅니다.
미래에 대비할 수있는 센티넬 값은 무엇입니까?
1 ) PNG 형식의 첫 번째 바이트는 ASCII가 아닌 0x89
값을 가지며 그 뒤에 문자열이옵니다 PNG
. PNG의 처음 몇 바이트를 읽는 도구는 해석 할 수 없으므로 이진 파일이라고 판단 할 수 있습니다 0x89
. 반면 GIF 파일은 유효하고 읽을 수있는 ASCII 문자열 GIF
과 3 개의 유효한 ASCII 문자로 직접 시작됩니다 . GIF의 경우 도구가 읽을 수있는 텍스트 파일인지 확인할 수 있습니다. 텍스처가 아닌 바이트 시퀀스로 파일을 시작한다는 아이디어는 Andy McFadden의 Designing File Formats 에서 비롯되었습니다 .
GIF8
. SGI movi 파일은로 시작합니다 MOVI
. zip 아카이브 파일의 한 스타일은로 시작하며 ZZ
, 가장 인기있는 pkzip 형식은로 시작합니다 PK
. 첫 번째 바이트가 유효하지 않은 텍스트 문자이어야한다는 제약 조건이 와일드에서 발견 된 것과 일치하지 않는 것 같습니다. 왜 이것이 요구 사항인지 궁금합니다.
Since it is a binary format, the first bytes of the file should not form valid textual characters
-이 응용 프로그램이 파일 형식을 식별하는 방법을 보여주는 매직 파일 (/ usr / share / magic 또는 많은 유닉스 시스템의 / etc / magic)을 살펴보십시오. PNG 파일은 처음부터 시작\x89PNG\x0d\0a\x1a\x0a
합니다. "PNG"는 원시 문자열입니다. 시퀀스\x89
등은 인쇄 불가능한 바이트이다.