La langue thaïlandaise ne s'affiche pas dans la sortie Java


Impossible d'imprimer la valeur de la chaîne thaï dans la console Java

public static void main(String [] args){
   String engParam = "Beautiful";
   String thaiParam = "สวย";
   System.out.println("Output :" + engParam + ":::" + thaiParam);}

La sortie s'affiche comme:

Output :Beautiful:::à?ªà??à?¢

Je pense que Système.hors.println ne pourra pas imprimer les caractères UTF-8 avec les paramètres par défaut de la console. Existe-t-il un autre moyen de résoudre ce problème? besoin d'aide.

Author: AritraDB, 2019-12-13

6 answers

Vous ne spécifiez pas votre environnement, mais cette approche a fonctionné pour moi sur Windows 10 à partir de monE, et aussi à partir de la fenêtre de commande:

  • Tout d'abord, utilisez une police qui prend en charge les caractères thaïlandais. Mais assurez-vous également que la police que vous choisissez peut être définie dans la fenêtre de commande, et pas seulement dans votreE. Certains (par exemple Messagerie Mono Thaïlandais), et certains ne peuvent pas (par exemple, Angsana Nouveau). Vous pouvez jouer avec le registre pour ajouter des sélections de police, mais Courier Mono Thai était disponible par défaut, j'ai donc utilisé celui-là.
  • Une fois que vous avez identifié une police que vous pouvez définir dans la fenêtre de commande, vous pouvez probablement l'utiliser également dans votreE si ses polices par défaut ne peuvent pas gérer les caractères thaïlandais.

Voici les étapes pour faire fonctionner les choses:

  • Télécharger police de caractères Messagerie Mono Thaïlandais. Vous pouvez le télécharger à partir de plusieurs sites Web mais je l'ai obtenu d'ici.
  • Installez la police téléchargée. Sur Windows 10 tout ce que vous avez à faire est sélectionnez-le (Courier_MonoThai.ttf ) dans l'Explorateur de fichiers, faites un clic droit et sélectionnez Install dans le menu contextuel.
  • Une fois la police installée, faites-en la police par défaut dans la fenêtre de commande. Ouvrez une fenêtre de Commande, cliquez sur l'icône dans le coin supérieur droit, sélectionnez Propriétés, puis sélectionnez Messagerie Mono Thaïlandais, comme votre police de caractères:

    CmdFont

  • Exécutez l'application dans votreE. Si le code source ou la sortie ne s'affichent pas les caractères thaïlandais correctement, changer la police. J'ai utilisé Courier Mono Thai dans NetBeans, et tout avait l'air bien: NetBeansWindow
  • Enfin exécuté dans la fenêtre de commande. Les caractères thaïlandais ne seront probablement pas rendus correctement. Pour résoudre ce problème, changez simplement la page de code en celle qui prend en charge le thaï (chcp 874 ) avant d'exécuter votre application: cmdRun

Ces instructions sont spécifiques à Windows 10. Si vous exécutez dans un autre environnement mettez à jour votre question avec tous les détails de votre plateforme et de votreE.


Mise à jour le 15/12/19 pour fournir une approche alternative:

Au lieu d'utiliser la page de code 874 (Thai) de la fenêtre de commande, vous pouvez le faire à la place:

  • Créer un PrintStream qui utilise le jeu de caractères UTF-8, et écrire la sortie en utilisant ce PrintStream.
  • Dans la fenêtre de commande, utilisez la page de code 65001 (UTF-8).

Voici le code:

package thaicharacters;

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;

public class ThaiCharacters {

public static void main(String[] args) throws UnsupportedEncodingException {

    String engParam = "Beautiful";
    String thaiParam = "สวย";

    // Write the output to a UTF-8 PrintStream:
    PrintStream ps = new PrintStream(System.out, true, StandardCharsets.UTF_8.name());
    ps.println("UTF-8: " + engParam + ":::" + thaiParam);
}
}

Et voici la sortie dans la fenêtre de commande, montrant que:

  • Les caractères thaïlandais ne sont pas rendus correctement lors de l'utilisation de la page de codes par défaut (437) ou de la page de codes thaïlandais (874).
  • Les caractères thaïlandais s'affichent correctement en utilisant la page de code UTF-8 (65001):

chcp65001

 1
Author: skomisa, 2019-12-16 01:01:49

On ne peut pas facilement changer l'encodage d'une console Windows. Afin d'écrire d'une .fichier txt. Pour que Windows détecte l'encodage Unicode UTF-8, vous pouvez écrire au début un caractère de nomenclature invisible: "\ufeff".

String text = "\uFEFF" + "Output :" + engParam + ":::" + thaiParam;
Path path = Paths.get("temp.txt");
Files.write(path, Collections.singletonList(text)); // Writes in UTF-8
 1
Author: Joop Eggen, 2019-12-13 12:20:08

Le problème n'est pas en Java. Lors de la conversion en UTF-8, le thai chaîne "สวย" donne les octets '0xe0', '0xb8', '0xaa', '0xe0', '0xb8', '0xa7', '0xe0', '0xb8', '0xa2'

En Latin1, 0xe0 est à, 0xaa est ª, oxa2 est ¢, et les autres n'ont pas de représentation en donnant la ? caractères.

Cela signifie que le println a fait sa part du travail mais que le chose qui aurait dû afficher les caractères (écran de terminal ouE) ne peut pas ou n'a pas été chargé de processus UTF8.


Malheureusement, la console Windows n'est pas vraiment compatible avec Unicode. Les versions récentes (>=Win 7) prennent en charge une page de code utf-8 (chcp 65001) qui traite correctement les chaînes d'octets UTF-8 à condition que son jeu de caractères sous-jacent puisse afficher les caractères. Par exemple, après avoir tapé chcp 65001 mon système français affiche avec succès tous les caractères accentués (éèùïêçàâ...) lorsqu'ils sont encodés en UTF-8, mais ne peuvent pas afficher votre exemple de chaîne thaïlandaise.

Si vous avez besoin d'un vraiment UTF-8 console compatible sur Windows, vous pouvez essayer l'excellent ConEmu .

 1
Author: Serge Ballesta, 2019-12-18 06:58:16

Cette réponse pour une question similaire pourrait être votre cas, si vous utilisez eclipse (mais il peut être presque la même dans IntelliJ)

 0
Author: Jimi, 2019-12-13 13:13:14

Cette réponse suppose que:

  1. Vous utilisez Windows.
  2. La "console Java" que vous avez dite est une invoke d'invite de commande (Vous ne savez peut-être rien à ce sujet si vous utilisez unE, mais cmd et IntelliJ IDEA le font sûrement, bien que je ne sache pas si Eclipse ou autre le fait).
  3. Ma supposition était juste: -)

Allez dans l'éditeur de registre (regedit), localisez dans "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor", créez un REG_EXPAND_SZ nommé AutoRun avec la valeur chcp 65001. Ensuite, réessayez (aucun redémarrage requis).

En fait, c'est un exemple de création et d'utilisation d'un "initscript" pour cmd.exe. C'est peut-être le moyen pour nous de changer l'encodage de la console de facto "par défaut" en UTF-8 (codepage 65001) sans trop changer les configurations du système.

Pour le restaurer, supprimez simplement cette valeur spécifiée.

 0
Author: Geno Chen, 2019-12-16 10:29:00

Définir la variable d'environnement java_tool_options=-Dfile.encoding = utf8 dans cmd utiliser chcp 65001

 0
Author: virxen, 2020-02-19 14:19:25