代码之家  ›  专栏  ›  技术社区  ›  Matthieu

在JAI TIFF字段中,可以将字符集指定为编码ASCII的默认字符集吗?

  •  0
  • Matthieu  · 技术社区  · 11 年前

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

    当我用十六进制编辑器打开生成的TIFF文件时,我可以看到字节 233天 ,但当我试图通过JAI通过 TIFFField.getAsString() ,我得到了 '?' (统一码 0xfffd “替换字符”)。 我已经检查了 TIFF 6.0 specifications 但他们只提到了“7位ASCII”。

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

    1 回复  |  直到 4 年前
        1
  •  4
  •   Harald K    11 年前

    根据规范,定义为ASCII的TIFF标记只允许包含纯7位ASCII。

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

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

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

    • 如果标记允许,请使用BYTE或UNDEFINED,而不是ASCII+编码规范
    • 如果可能,请使用不同的标记来写入值(允许BYTE或UNDEFINED值+编码规范)
    • 如果以上两种都不可能,那么最好的办法是获取实际的字节并自行解码,或者使用不同的库来解析TIFF结构