【问题标题】:Loading a Java Charset manually手动加载 Java 字符集
【发布时间】:2011-06-10 15:30:23
【问题描述】:

我正在使用JavaMail API 做一些工作,并且遇到了 Java 本身不支持的编码(按设计),例如 UTF7/unicode-1-1-utf-7。特别是对于这种编码,我发现了 Java CharsetCharsetProviderJUTF7 实现,用于 UTF7。但是,将 jutf7.jar 添加到我的类路径后,我仍然得到UnsupportedEncodingExceptions,而且 unicode-1-1-utf-7 绝对是 JUTF7 的别名之一。

有没有办法手动加载Charset 或确保正在加载Charset,以便我可以排除这是一个原因?

【问题讨论】:

    标签: java character-encoding jakarta-mail utf-7


    【解决方案1】:

    除了将必要的类放入类路径之外,使用新的字符集还有更多内容。引用 Javadocs:

    字符集提供程序标识自己 带有提供者配置文件 命名为 java.nio.charset.spi.CharsetProvider 在资源目录中 META-INF/服务。该文件应 包含完全合格的列表 具体的 charset-provider 类名, 每行一个。 [...]

    (http://download.oracle.com/javase/6/docs/api/java/nio/charset/spi/CharsetProvider.html)

    这个特殊文件是否存在于 JAR 中?

    【讨论】:

    • 这就是问题所在,谢谢!为了避免安装 Apache Maven,我做了一些快速的源代码迁移。结果我不小心把特殊文件留在了罐子里。我已经用 Maven 构建了一个 jar,现在问题已经解决了。
    【解决方案2】:

    您应该确保 jar 由主类加载器加载。您可以通过将 jar 添加到 JVM 的 jre/lib/ext 扩展目录或将其添加到主程序的类路径来实现此目的。例如,如果您使用的是 Tomcat,请将 -cp /path/to/jutf7.jar 添加到 Tomcat 的启动脚本中。

    同样,如果你想从 scala REPL 中测试 jutf7,你需要按如下方式启动它

    env JAVA_OPTS="-cp /path/to/jutf7-1.0.0.jar" scala
    

    Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03-424, mixed mode)测试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 2019-12-19
      • 2017-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      相关资源
      最近更新 更多