Может кто-нибудь дать мне представление о том, что происходит, потому что я продолжаю получать довольно странные результаты своих тестов.Итак, у меня есть проект maven в IntelliJ, и если я запускаю этот код (обратите внимание на кириллическую строку) внутри IDE, вывод будет таким, как ожидалось.
JsonObject json = new JsonObject();
json.addProperty("message", "тест");
System.out.println("TEST:"+json.get("message").getAsString());
Вывод в IDE: TEST: тест
Но если я упаковываю проект в jar-файл, код JsonObject как-то портится, и приведенный выше код приводит к:
Вывод в консоль из jar: TEST: ????
Вещи, которые я пытался:
принуждение JVM к использованию -Dfile.enconding = UTF-8 просто чтобы посмотреть, влияет ли это на это, но ничего не изменилось.
получение байтов json.get ("message"). GetAsString () и создание новой строки с указанной кодировкой new String (bytes, StandardCharsets.UTF_8)
проверил аргументы выполнения проекта IntelliJ (ничего не указано)
проблема сохраняется со всеми символами со значением ASCII выше 127 (с упоминанием ASCII, потому что UTF ибольшинство кодировок наследуют первые 127 символов из ASCII)
Это не проблема, связанная с консолью, поскольку та же проблема сохраняется для элементов пользовательского интерфейса, которые поддерживают UTF-8. Вот пример:http://prntscr.com/lmca64.Это все еще сохраняется ТОЛЬКО в приложении экспортированной банки!
Есть ли у вас какие-либо идеи, что может вызвать это противоречивое поведение? ссылка на библиотеку GSON
Обновление *: после дальнейшего тестирования здесь выводится следующий код:
JsonObject json = new JsonObject();
json.addProperty("message", "тест");
byte[] jsonBytes = json.get("message").getAsString().getBytes();
for(byte b : jsonBytes) {
System.out.print(b+" ");
}
System.out.println();
byte[] stringBytes = "тест".getBytes();
for(byte b : stringBytes) {
System.out.print(b+" ");
}
Вывод IDE:
-47 -126 -48 -75 -47 -127 -47 -126
-47 -126 -48 -75 -47 -127 -47 -126
Скомпилированный вывод консоли jar:
63 63 63 63
63 63 63 63
Это означает, что обе строки одинаковы, но после упаковки в jar что-то происходит. Десятичный знак в текстконвертер
Вот мой pom.xml.Может быть, я что-то не так делаю при экспорте банки в неправильной кодировке?
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<groupId>me.ivstiv</groupId>
<artifactId>Trapdoor-client</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<finalName>Trapdoor-client-1.0-fat</finalName>
<archive>
<manifest>
<mainClass>core.Main</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
</dependencies>