0

我使用 JAI 将字符串存储在 TIFF 标头中。某些字符串包含值大于 127d 的字符(例如'é'is 233d)。

当我使用十六进制编辑器打开生成的 TIFF 文件时,我可以看到 byte 233d,但是当我尝试通过 JAI 读取它时TIFFField.getAsString(),我得到了'?'(Unicode 0xfffd“替换字符”)。我检查了TIFF 6.0 规范,但他们只提到“7 位 ASCII”。

我想告诉 JAI 用来ISO-8859-1 Charset解码字符串。那可能吗?我在(旧)javadoc 中没有找到任何内容。作为最后的手段,我也可以对字符串使用 URL 编码,但宁愿避免这种情况。

4

1 回答 1

4

定义为 ASCII 的 TIFF 标签按照规范仅允许包含纯 7 位 ASCII。

不幸的是,这在现实世界中不是很有用(并非所有人都会说英语),因此许多软件会在这些字段中写入UTF8甚至ISO-8859-x编码字符串,即使它违反了规范。ASCII 标记中不允许使用其他编码。

JAI 在阅读方面非常严格,可能会将字符串解码为纯 ASCII,并且由于 'é' 不是该字符集的一部分,因此它将其替换为“unicode 替换字符”。

您最好的选择是执行以下操作之一:

  • 如果标签允许,使用 BYTE 或 UNDEFINED 代替 ASCII + 编码规范
  • 如果可能,请使用不同的标签来写入您的值(允许 BYTE 或 UNDEFINED 值 + 编码规范)
  • 如果以上都不可能,最好的办法是获取实际字节并自己解码,或者使用不同的库来解析 TIFF 结构
于 2013-09-03T07:30:13.540 回答