2013-09-02 2 views
0

JAI를 사용하여 TIFF 헤더에 문자열을 저장하고 있습니다. 일부 문자열은 값이 127d보다 큰 문자를 포함합니다 (예 : 'é'233d).JAI TIFF 필드에서 ASCII 인코딩에 대한 charset을 기본값으로 지정할 수 있습니까?

내가 16 진수 편집기와 결과 TIFF 파일을 열 때, 나는 바이트 233d 볼 수 있지만 나는 TIFFField.getAsString()에 의해 다시 JAI을 통해 그것을 읽을 때, 나는 '?' 받고 있어요 (유니 코드 0xfffd "대체 문자를") . TIFF 6.0 specifications을 확인했지만 "7 비트 ASCII"만 언급했습니다.

문자열을 디코딩하기 위해 JAI에 ISO-8859-1Charset을 사용하고 싶습니다. 그게 가능하니? 나는 (이전) javadoc에서 아무것도 찾지 못했다. 최후의 수단으로 문자열에 URL 인코딩을 사용할 수도 있지만이를 피하는 것이 좋습니다.

+0

쓰고있는 TIFF 태그의 유형은 무엇입니까? 태그가 ASCII로 지정되면 다른 인코딩은 사용할 수 없습니다 (소프트웨어가 UTF8을 쓰는 것을 본 적이 있지만). – haraldK

+0

@haraldK 예, TIFF_ASCII입니다. JAI는 Java String (유니 코드)을 통해 글을 처리하지만 'é'라고 쓰면 '?'가 표시됩니다. 다시 읽을 때. – Matthieu

답변

1

ASCII로 정의 된 TIFF 태그는 일반 7 비트 ASCII 만 허용되는 사양입니다.

불행히도 현실 세계에서는별로 유용하지 않습니다. (우리 모두가 영어를 사용하지는 않습니다.) 많은 소프트웨어가 UTF8 또는 ISO-8859-x 인코딩 문자열을이 필드에 쓸 것입니다. 사양. ASCII 태그에는 다른 인코딩이 허용되지 않습니다.

JAI는 읽기가 매우 엄격하며 아마 문자열을 일반 ASCII로 디코딩하며 'é'는 해당 문자셋의 일부가 아니므로 "유니 코드 대체 문자"로 바꿉니다. 작성하는 다른 태그를 사용하여 태그를 사용 BYTE에서 허용 또는 대신 ASCII + 인코딩 사양

  • 가능한 경우의 undefined 인 경우

    • :

      가장 좋은 방법은, 다음 중 하나를 수행하는 것입니다 값 (BYTE 또는 UNDEFINED 값 + 인코딩 사양을 허용)

    • 위의 방법 중 어느 것도 가능하지 않으면 실제 바이트로 가져와 직접 해독하거나 다른 라이브러리를 사용하여 TIFF 구조를 구문 분석 할 수 있습니다.
  • +0

    당신이 그것을 말할 까봐 두렵다;) TIFF를 파싱하기 위해 다른 라이브러리를 사용하고 싶지 않다. 다중 페이지 JPEG-in-TIFF를 처리 할 수 ​​있다는 것을 안다면? JAI에서 필드의 실제 바이트를 가져 와서 직접 디코딩 할 수 있습니까? – Matthieu

    +1

    필요에 맞는지 확실하지 않지만 다중 페이지 JPEG를 지원해야하는 순수 Java [ImageIO 용 TIFF 플러그인] (https://github.com/haraldk/TwelveMonkeys/tree/master/imageio/imageio-tiff)을 개발 중입니다. 인코딩 된 TIFF 파일 (이전 및 새 버전 모두). 느긋하게 시험해보십시오. 이 플러그인과는 별도로 [TIFF/EXIF ​​파서] (https://github.com/haraldk/TwelveMonkeys/tree/master/imageio/imageio-metadata/src/main/java/com/twelvemonkeys/imageio/metadata)도 있습니다./exif) 태그를 읽는 데 사용할 수 있습니다. JAI에서 실제 바이트에 액세스 할 수 있는지 여부를 모릅니다. 미안합니다. – haraldK

    +1

    고마워, 나는 그것을 시도 할 시간을 찾으려고 노력할 것이다. 그 동안에는 문자열을 저장하기 전에 URL 인코딩 만 할 것입니다. 크기와 코드에 최소한의 영향을 미칠 것으로 보입니다. – Matthieu