有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Fabric8开放Jdk容器中启用扩展编码?

我在fabric8/java-alpine-openjdk11-jre:1.6.5容器中得到了UnmappableCharacterException。如何修复此异常

java.nio.charset.UnmappableCharacterException: Input length = 1
    at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:275)
    at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:306)
    at java.base/sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:281)
    at java.base/sun.nio.cs.StreamEncoder.write(StreamEncoder.java:125)

应用程序上下文:

我的应用程序是带有Quarkus框架的web api应用程序,基本上我使用UTF-8编码,但在某些情况下,我需要使用其他编码,如MS932 (Windows-31j)

当我在机器上运行应用程序时(不是在容器中,使用./gradlew quarkusDev),我可以用这些特定的编码获得响应,但是在容器中,我得到了上面的异常

最近我将框架Jersey更改为Quarkus,将tomcat:8.5-jdk11-openjdk-slim容器更改为fabric8/java-alpine-openjdk11-jre:1.6.5容器

我确信带有tomcat:8.5-jdk11-openjdk-slim的Jersey毫无例外地响应了,所以我稍后会尝试使用openjdk11 slim image,但我喜欢fabric8的容器,所以我想修复这个问题并继续使用它

检测结果:

我尝试将这些特定编码更改为UTF-8UTF-16,响应是可以的,但不仅MS932,而且SJISGBK和其他Extended Encoding Set返回异常

在本文中,我猜这些异常与Extended Encoding Set和fabric8的容器映像有关

环境信息和Dockerfile:

以下是我的Dockerfile部分(它基于Quarkus生成的Dockerfile):

FROM fabric8/java-alpine-openjdk11-jre:1.6.5
ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV AB_ENABLED=jmx_exporter

# Be prepared for running in OpenShift too
RUN adduser -G root --no-create-home --disabled-password 1001 \
  && chown -R 1001 /deployments \
  && chmod -R "g+rwX" /deployments \
  && chown -R 1001:root /deployments

COPY --from=build /home/gradle/project/build/lib/* /deployments/lib/
COPY --from=build /home/gradle/project/build/*-runner.jar /deployments/app.jar
EXPOSE 8080

# run with user 1001
USER 1001
  • 操作系统:Debian GNU/Linux 10
  • Docker版本:18.09.1

参考资料


共 (1) 个答案

  1. # 1 楼答案

    我们找到了解决办法

    不幸的是,这不是Quarkus、Fabric8和Java的问题,只是数据(字符)

    最近数据更新了。它包含一些MS932或其他编码无法显示的字符,但UTF-8可以。因此,它导致了这个问题

    尴尬,但问题解决了