У меня есть исключение UnmappableCharacterException в fabric8/java-alpine-openjdk11-jre:1.6.5
контейнере. Как я могу исправить это исключение?
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)
Контекст приложения:
Мое приложение является приложением веб-API с Quarkus Framework, и в основном я использую кодировку UTF-8, но в какой-то момент я необходимо использовать другую кодировку, например MS932 (Windows-31j)
.
Когда я запускаю приложение на машине (не в контейнере, с ./gradlew quarkusDev
), я могу получить ответ с помощью указанной кодировки c, но в контейнере у меня есть исключение, описанное выше.
Недавно я изменил структуру Jersey на Quarkus, а контейнер tomcat:8.5-jdk11-openjdk-slim
на fabric8/java-alpine-openjdk11-jre:1.6.5
контейнер.
I ' Я уверен, что Джерси с tomcat:8.5-jdk11-openjdk-slim
ответил без исключения, поэтому я попробую позже с изображением openjdk11-slim, но мне нравится контейнер fabric8, поэтому я хочу исправить эту проблему и продолжать использовать его.
Обнаружен Выводы:
Я пытался изменить эти спецификации c кодировки на UTF-8
или UTF-16
, ответы в порядке, но не только MS932
, также SJIS
, GBK
и другие Расширенный набор кодировок возвращает исключение.
В этом в контексте, я думаю, эти исключения связаны с Extended Encoding Set
и изображением контейнера fabric8.
Environment Info и 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
Ссылки