2 votes

Le programme d'exécution de la ligne de commande de Spring Boot utilise l'encodage de caractères par défaut de Windows.

J'exécute une application Spring Boot sous Windows et elle utilise l'encodage Windows-1252. Cependant, le programme java autonome utilise l'encodage UTF-8. Comment puis-je forcer spring boot à utiliser UTF-8. Le code ci-dessous produit ? ???. J'utilise la commande suivante en utilisant jar -jar target \spring -boot-example.jar

J'ai vérifié que dans le programme Power Shell, le jeu de caractères par défaut est Windows-1252 (System.Text.Encoding)::Default.

public class SpringBootConsoleApplication implements CommandLineRunner {
public static void main(String[] args) throws Exception {
    SpringApplication.run(SpringBootConsoleApplication.class, args);
}

    @Override
    public void run(String... args) throws Exception {
        System.out.println("Default Charset=" +   Charset.defaultCharset());
        System.out.println("test::" +"الرياض");        
    }
}

J'ai essayé les options ci-dessous dans application.properties sans succès :

# Charset of HTTP requests and responses. Added to the "Content-Type"    header if not set explicitly.
 spring.http.encoding.charset=UTF-8
 # Enable http encoding support.
 spring.http.encoding.enabled=true
 # Force the encoding to the configured charset on HTTP requests and   responses.
 spring.http.encoding.force=true

1voto

Abhijit Sarkar Points 206

Le problème semble venir de votre stdout, pas du code. Je vous suggère de créer un simple main sans Spring Boot, ni aucune dépendance externe, et imprimer des caractères UTF-8. Je suis sur un Mac, et le code suivant imprime trouver pour moi :

public class Main {

    public static void main(String[] args) {
        System.out.println("Default Charset=" + Charset.defaultCharset());
        System.out.println("test::" + "الرياض");
    }
}

Default Charset=UTF-8
test::الرياض

Une autre chose que vous pouvez essayer est d'écrire dans un fichier au lieu de stdout.

Modifier :

Je pense que vous aboyez le mauvais arbre. Personne n'utilise Spring Boot pour imprimer sur stdout. Le site spring.http.encoding les propriétés que vous avez définies sont en fait HttpEncodingProperties que Boot utilise pour configurer automatiquement l'encodage à l'aide de la fonction HttpEncodingAutoConfiguration . Mais tout cela est pour une requête HTTP, pas pour une impression sur stdout. Toute application qui mérite d'aller sur Prod devrait utiliser un logger, et non pas System.out.println .

0voto

JC Carrillo Points 710

Essayez d'exécuter votre application avec -Dfile.encoding=UTF8 dans la ligne de commande.

Exemple :

java -jar -Dfile.encoding=UTF8 target/myapp-0.0.1-SNAPSHOT.jar

-1voto

Ayub Points 162

@AbjitSarkar @JC Carrillo ce problème semble être lié à l'environnement Windows. J'ai déployé le même code sur UbuntuVM et tout semble aller bien.

Merci de m'avoir écouté et de m'avoir donné des conseils pour explorer ! !!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X