默认编码和平台编码
对于其 doc flavor 的 mime 类型未包括 charset
参数的 byte 打印数据而言,java 打印服务实例假定默认的字符集是 us-ascii。这与 rfc 2046 保持一致,它声明默认的字符集是 us-ascii。注意,us-ascii 是一个 utf-8 子集,所以如果未来 rfc 以兼容的方式将 utf-8 作为默认值,则可能会扩大该字符集。
还要注意,当以文本数据的形式解释 byte 流时,这与 java 运行时的行为有所不同。这假定了用于用户语言环境的默认编码。因此,当以本地编码形式使用 java 打印服务后台打印某个文件时,正确指定编码很重要。在英语语言环境中工作的开发人员应该特别注意这一点,因为其平台编码对应于默认的 mime 字符集。在这种纯属巧合的特定情况下,不指定平台数据的编码也可工作。
每个 java 虚拟机实例都具有在虚拟机启动期间所确定的默认字符编码,并且该默认编码通常取决于底层操作系统使用的语言环境和字符集。在分布式环境中,不保证两个 vm 共享同一默认编码。因此,希望以流的形式将平台编码文本数据从主机平台发送到 java 打印服务实例的客户端,必须显式地声明字符集,而不能依赖于默认值。
首选的形式是正式的 iana 编码主名称。以流形式发送文本数据的应用程序应该始终在 mime 类型中指定字符集,这就需要为数据(如文件,以该平台的编码形式存储)获得主机平台的编码形式。可从 docflavor.hostencoding
获得与此对应且适合以 docflavor 的 mime 类型所使用的 charset。这可能不会总是主 iana 名称,但是可保证是此 vm 所理解的 charset。对于公共的 flavor,可以使用预定义的 *host docflavor。
有关 java 平台所支持的字符编码的更多信息,请参阅字符编码。