/ / La console Eclipse n’imprime pas les caractères chinois - java, eclipse, utf-8

La console Eclipse n’imprime pas les caractères chinois - java, eclipse, utf-8

J'ai écrit une fonction Java qui prend unparamètre de chaîne et générer un identifiant aléatoire à l'aide d'une certaine logique. Tout fonctionne correctement si ma chaîne contient des caractères anglais, mais lorsque je passe des caractères chinois, ceux-ci sont remplacés par ???

Voici mon code:

public static String generateId(String inputString) {
/**
* Split input string on the basis of white spaces
*/
String arr[] = inputString.split(" ");
/**
* Change the first character of first substring to lowercase
*/
String id = arr[0].substring(0, 1).toLowerCase() + arr[0].substring(1);
if(arr.length > 1)
{
for (int i = 1; i < arr.length; i++) {
/**
* Change the first character of remaining substrings to uppercase
* and append to id
*/
if(arr[i].trim().length() != 0)
{
id = id + arr[i].substring(0, 1).toUpperCase() + arr[i].substring(1);
}
}
}
int length = id.length();
Random random = new Random();
/**
* If the length of id is less than 8 then append random digits to make
* length equals to 8 else take a substring of length equals to 8
*/
if (length < 8) {
int len = 8 - length;
StringBuilder sb = new StringBuilder(len);
for (int i = 0; i < len; i++) {
sb.append((char) ("0" + random.nextInt(10)));
}
id = id + sb;

} else {
id = id.substring(0, 8);
}
/**
* Append 4 digits random number to make length of id equals to 12
* characters long
*/
return id + String.format("%04d", random.nextInt(10000));
}

Voici mes sorties pour différents cas:

 System.out.println(MyClass.generateId("anyid"));

Sortie: anyid0660920

System.out.println(MyClass.generateId("这是标题"));

Sortie: ???? 14102367

Comment puis-je régler ce problème?

Réponses:

1 pour la réponse № 1

Changez le codage de la console en utf-8,

Aller à Run -> Run Configurations -> Common Tab -> Console Encoding (or just Encoding, in newer versions) -> Choose UTF - 8.

Par défaut, il s’agit d’un codage latin (8859) qui ne prend pas en charge le chinois.