2017-03-10 11 views
1

CSV 파일을 생성하고이를 브라우저로 다시 스트림하는 JAX-RS REST 서비스가 있습니다. 모든 것은 UTF-8로 설정되어 있기 때문에, 브라우저를 통해 다운로드 한 파일도 유효하고 읽기 쉬운 UTF-8 움라우트 등을 보여주는 유효한 UTF-8 파일 (메모장 + +, Sublime 등)입니다.브라우저 다운로드에서 UTF-8 BOM 유지

엑셀에서 이러한 파일을 열면 엑셀이 분명히 다른 문자셋 (CP-1252로 열려고 시도하지만 분명히 중요하지는 않습니다) 때문에 읽을 수없는 움라우트 등이 생깁니다.

메모장을 통해 BOM 파일을 저장하고 ++에서 다시 열면 멋지게 작동합니다. Excel에서 UTF-8을 탐지하는 유일한 방법은 BOM 감지와 같습니다. 어쨌든 - BOM을 추가하면 도움이 될 것이라고 생각했는데 ...

그랬습니까. 같은 결과. 잠시 후 BOM이 일부 상황에서 제거된다는 것을 알았습니다. BOM 앞에 문자를 추가하면 Hex 편집기에서 BOM을 볼 수있었습니다. 그 캐릭터를 제거한 후에, BOM은 더 이상 존재하지 않을 것입니다.

나는 cURL을 통해 파일을 다운로드하고 다운로드 할 때 정말 놀랐습니다. BOM이 거기에 있었다! 그때까지는 응용 프로그램, Content-Types, Encodigs, HTTP Headers 등과 관련이 있을지도 모른다고 생각했지만 그 모두가 괜찮은 것 같습니다.

이제 다양한 작업을 시도한 후 브라우저에서 BOM을 유지하는 방법을 알 수있는 아이디어가 있습니까? 설정할 수있는 HTTP 헤더가 있습니까? Chrome, Internet Explorer, Edge, Firefox는 모두 BOM을 제거하기 때문에 브라우저 컨벤션과 비슷합니다.

감사의 말씀을드립니다.

편집 : sideshowbarker의 대답 덕분에, 나는 내용이 BOM을 앞에 추가하여 해결 방법을 발견, 그래서 첫 번째 BOM 브라우저에 의해 제거됩니다 후 남은 BOM있을 것입니다.

답변

2

관련 사양에서 BOM을 제거해야한다는 생각이 들었습니다. 브라우저가하는 일입니다. 다음 단계를 실행, UTF-8 디코딩 바이트 스트림 스트림으로

:

  1. 버퍼이를하자 그 브라우저는 이것이다 the UTF-8 decode algorithm in the Encoding spec의 요구 사항을 준수한다 빈 바이트 순서 버퍼로스트림으로부터

  2. 읽기 3 바이트.

  3. 버퍼 하면은 0xEF 0xbb 경계에서 0xBF 일치 앞에 추가 버퍼 스트림로하지 않습니다.

  4. 출력을 코드 포인트 스트림으로 지정하십시오. 스트림과출력과

  5. 실행 UTF-8의 복호기.

  6. 돌아 가기 출력.

3 단계 박리 될 BOM 발생하는 것이다.

인코딩 사양에는 이러한 요구 사항이 있으므로 브라우저에 BOM을 유지할 수있는 방법이 없다고 생각합니다.

+0

감사합니다.이 게시물은 정말 유용하고 약간의 해결 방법으로 안내합니다 : 처음 3 바이트 만 읽으므로 이제는 다운로드 후에 BOM 파일과 함께 유효한 UTF-8을 생성하는 콘텐츠에 두 개의 BOM이 추가됩니다 . 기록을 위해 나는 그 해결 방법으로 질문을 갱신 할 것이다. –