문제

이것들은 더 이상 사용되지 않습니까? 그들은 최악의 아이디어처럼 보입니다. 아무도 볼 수없는 파일의 내용에 무언가를 포함 시키지만 파일의 기능에 영향을 미칩니다. 왜 내가 원하는지 이해가 안 돼요.

도움이 되었습니까?

해결책

UTF-16의 리틀 엔디안 및 대기업 구현이 있기 때문에 경우에 따라 필요합니다.

알려지지 않은 UTF-16 파일을 읽을 때이 둘 중 어느 것이 사용되었는지 어떻게 알 수 있습니까? 유일한 솔루션은 파일에 쉽게 식별 할 수있는 마커를 배치하는 것입니다.이 파일에 사용 된 엔디 언에 관계없이 다른 어떤 것도 착각 할 수 없습니다.

그것이 Bom이하는 일입니다.

그리고 당신은 하나가 필요합니까? 1) 1) 단독이 문제인 UTF 인코딩을 사용하는 경우 (UTF-16의 경우 중요하지만 UTF8은 엔디 언에 관계없이 항상 동일하게 보입니다), 그리고 파일은 외부 응용 프로그램과 공유됩니다.

자신의 앱이 파일을 읽고 쓸 수있는 유일한 앱이라면 BOM을 생략하고 사용하려는 모든 엔지니어를 한 번에 결정할 수 있습니다. 그러나 다른 응용 프로그램이 파일을 읽어야한다면 미리 엔디네스를 알지 못하므로 BOM을 추가하는 것이 좋습니다.

다른 팁

일부 발췌 UTF 및 BOM FAQ 유니 코드 컨소시엄에서 도움이 될 수 있습니다.

Q : BOM이란 무엇입니까?

ㅏ: 바이트 주문 마크 (BOM)는 문자 코드 U+FEFF로 구성됩니다. 데이터 스트림의 시작시, 주로 표시되지 않은 일반 텍스트 파일의 바이트 순서 및 인코딩 양식을 정의하는 서명으로 사용할 수 있습니다. 일부 더 높은 수준의 프로토콜에서, 해당 프로토콜에 정의 된 유니 코드 데이터 스트림에서 BOM의 사용은 필수 (또는 금지) 될 수있다. (강조 광산.)

바이트 주문 마크는 정확히 말하지 않을 것입니다 내장 데이터에서. 오히려, 그것 접두사 자료. 캐릭터는 데이터 스트림에서 첫 번째 일 때 바이트 주문 마크입니다. 다른 곳에서 그리고 그것은입니다 제로 폭이 끊어지는 공간. 바이트 주문 마크를 존중하지 않는 유니 코드 인식 프로그램은 캐릭터가 보이지 않기 때문에 어쨌든 그 존재에 해를 끼치 지 않으며, 텍스트 블록이 시작될 때 Word-joiner는 다음 캐릭터와 결합됩니다. 따라서 효과가 없습니다.

Q : BOM은 어디에 유용합니까?

ㅏ: BOM은 텍스트로 입력 된 파일의 시작 부분에서 유용하지만 엔디 어 형식이 크든 작은 여부에 관계없이 알 수없는 것은 아닙니다. 또한 파일이 유니 코드에 있음을 나타내는 힌트 역할을 할 수도 있습니다. 레거시 인코딩 및 또한 사용 된 특정 인코딩 양식의 시그니처 역할을합니다.

따라서 프로그램이 유니 코드의 여러 인코딩을 처리 할 수있는 경우 BOM을 원할 것입니다. 귀하의 프로그램은 입력을 해석 할 때 어떤 인코딩을 사용할 인코딩을 어떻게 알 수 있습니까?

Q : BOM이 사용되는 경우 16 비트 유니 코드 텍스트에만 있습니까?

ㅏ: 아니요, BOM은 UNICODE 텍스트가 변환되는 방식에 관계없이 서명으로 사용할 수 있습니다 : UTF-16, UTF-8, UTF-7 등 BOM을 포함하는 정확한 바이트는 유니 코드 문자 U+Feff가 변환되는 것이 무엇이든 그 변환 형식으로. 이 형식으로 BOM은 유니 코드 파일과 어떤 형식이 있는지를 모두 나타내는 역할을합니다.

아마도 오늘날 BOM이 가장 자주 사용되는 경우 일 것입니다. UTF-8 인코딩 된 텍스트를 다른 인코딩과 구별합니다. UTF-8에는 하나의 순서 만 있기 때문에 바이트의 순서를 실제로 표시하는 것은 아닙니다.

자신의 프로토콜 또는 데이터 형식을 설계하는 경우 BOM을 사용할 필요가 없습니다. FAQ의 또 다른 질문은 다음과 같습니다.

Q : U+FEFF를 BOM으로 해석하지 않는 데이터를 어떻게 태그합니까?

ㅏ: TAG UTF-16BE를 사용하여 Big-Endian UTF-16 텍스트를 표시하고 UTF-16LE는 Little-Endian UTF-16 텍스트를 나타냅니다. BOM을 사용하는 경우 텍스트를 단순히 UTF-16으로 태그하십시오.

그것은 개념을 언급합니다 태깅 데이터 형식. 즉, 형식을 지정하는 것을 의미합니다 대역 밖 데이터 자체에서. 그러한 시설을 이용할 수 있다면 좋지만, 특히 오래된 시스템이 유니 코드로 개조 될 때는 종종 그렇지 않습니다.

BOM은 파일에 어떤 유니 코드를 인코딩하는지를 나타냅니다.이 차이가 없으면 유니 코드 리더는 파일을 읽는 방법을 모릅니다.

그러나 UTF-8에는 BOM이 필요하지 않습니다.

확인하십시오 위키 백과 기사.

UTF-8으로 이것을 태그로 표시하면서 BOM이 필요하지 않다고 말할 것입니다. By To 주문 마크는 파일이 파일에 있는지 여부를 컴퓨터에 알리기 때문에 UTF-16 및 UTF-32에만 유용합니다. 빅 엔디언 또는 리틀 엔디언. 일부 텍스트 편집기는 바이트 주문 마크를 사용하여 문서가 사용하는 인코딩을 결정할 수 있지만 이는 유니 코드 표준의 일부가 아닙니다.

"BOM"은 유니 코드를 사용하는 것이 16 비트 문자를 사용하는 것을 의미한다고 가정했을 때 유니 코드 초기의 홀드 오버입니다. 바이트 순서가 하나만있는 UTF-8과 같은 인코딩에서는 완전히 무의미합니다. U+Feff의 선택은 UTF-32의 경우 차선책입니다. 가능한 모든 중간 엔디언 바이트 주문을 구별 할 수 없기 때문에 (그렇게하려면 4로 인코딩 된 BOM이 필요합니다. 다른 바이트).

하나를 사용하는 유일한 이유는 바이트 주문이 다른 플랫폼간에 UTF-16 또는 UTF-32 데이터를 보낼 때이지만 (1) 대부분의 사람들은 UTF-8을 사용하고 (2) MIME입니다. charset 매개 변수는 더 나은 메커니즘을 제공합니다.

UTF16 및 UTF32는 빅 엔디 안 및 리틀 엔디안 형태로 작성 될 수 있습니다. 파일을 Endianess에서 처리 한 결과를 분석하여 Endianess를 휴식적으로 결정하려고 시도 할 수 있지만, 귀찮은 모든 것을 구하기 위해 BOM은 즉시 알려줄 수 있습니다.

UTF-8은 바이트를 바이트로 해독 할 때 실제로 BOM이 필요하지 않습니다.

텍스트 파일을 만들 때 직접 사용할지 여부에 관계없이 텍스트 파일을 읽을 때 알아야 할 가치가 있습니다. 즉 파일의 시작 부분에서 BOM을 감지하고 건너 뛰고 (이상적으로 처리). 나는 그것을 가지고있는 몇 가지를 만나고, 무슨 일이 일어나고 있는지 알아 내기 전까지는 처음에 일부 문제를 일으켰습니다.

UTF16 및 UTF32 BOMS가 컨텐츠가 큰 엔디안 또는 리틀 엔디 언 형식인지, 콘텐츠가 유니 코드인지 여부를 알려 주므로 UTF-8 BOM은 파일을 UTF-8 인코딩으로 분류합니다. UTF-8 BOM이 없으면 ANSI 파일인지 UTF-8 인코딩 된 파일인지 어떻게 알 수 있습니까? UTF-8 BOM은 물론 Endianess에게 말하지 않습니다. UTF-8은 항상 바이트 스트림이기 때문에 컨텐츠가 UTF-8 인코딩 유니 코드 또는 ANSI인지 알려줍니다. 물론 유효한 UTF-8 시퀀스를 스캔 할 수는 있지만 내 의견으로는 파일의 첫 세 바이트를 쉽게 확인하는 것이 더 쉽습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top