web-dev-qa-db-fra.com

Comment convertir UTF-8 en Unicode en Java?

Par exemple, dans Emoji Char set, U+1F601 est la valeur unicode de "GRINNING FACE WITH SMILING YEUX" et \xF0\x9F\x98\x81 est la valeur des octets UTF-8 pour ce caractère.

\xE2\x9D\xA4 est pour le coeur noir lourd, et le unicode est U+2764.

Ma question est donc la suivante: si j’ai un tableau d’octets avec la valeur (0xF0, 0x9F, 0x98, 0x81, 0xE2, 0x9D, 0xA4), comment puis-je le convertir en valeur Unicode?

Pour le résultat ci-dessus, ce que je veux, c'est un tableau String avec les valeurs "1F601" et "2764".

Je sais que je peux écrire une méthode complexe pour effectuer ce travail, mais j'espère qu'il existe déjà une bibliothèque pour le faire.

9
XWang

Ma question est donc la suivante: si j’ai un tableau d’octets avec une valeur (0xF0, 0x9F, 0x98, 0x81), comment puis-je le convertir en valeur Unicode?

Appelez simplement le constructeur String en spécifiant les données et l'encodage:

String text = new String(bytes, "UTF-8");

Vous pouvez spécifier une Charset au lieu du nom de l'encodage - j'aime Guava est simple Charsets class, ce qui vous permet d'écrire:

String text = new String(bytes, Charsets.UTF_8);

Ou pour Java 7, utilisez StandardCharsets sans même avoir besoin de goyave:

String text = new String(bytes, StandardCharsets.UTF_8);
8
Jon Skeet

Utilisez simplement la classe String:

byte[] bytesArray = new byte[10]; // array of bytes (0xF0, 0x9F, 0x98, 0x81)

String string = new String(bytesArray, Charset.forName("UTF-8")); // covert byteArray

System.out.println(string); // Test result
1
Ashwani

Voici une fonction pour convertir UNICODE (ISO_8859_1) en UTF-8

public static String String_ISO_8859_1To_UTF_8(String strISO_8859_1) {
final StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < strISO_8859_1.length(); i++) {
  final char ch = strISO_8859_1.charAt(i);
  if (ch <= 127) 
  {
      stringBuilder.append(ch);
  }
  else 
  {
      stringBuilder.append(String.format("%02x", (int)ch));
  }
}
String s = stringBuilder.toString();
int len = s.length();
byte[] data = new byte[len / 2];
for (int i = 0; i < len; i += 2) {
    data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                         + Character.digit(s.charAt(i+1), 16));
}
String strUTF_8 =new String(data, StandardCharsets.UTF_8);
return strUTF_8;
}

TEST

String strA_ISO_8859_1_i = new String("الغلاف".getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);

System.out.println("ISO_8859_1 strA est = "+ strA_ISO_8859_1_i + "\n String_ISO_8859_1To_UTF_8 = " + String_ISO_8859_1To_UTF_8(strA_ISO_8859_1_i));

R&EACUTE;SULTAT

ISO_8859_1 strA est = اÙغÙا٠String_ISO_8859_1To_UTF_8 = اللاف

0
che.moor

Voici un exemple d'utilisation de InputStreamReader:

InputStream inputStream = new FileInputStream("utf-8-text.txt");
Reader      reader      = new InputStreamReader(inputStream,
                                                Charset.forName("UTF-8"));

int data = reader.read();
while(data != -1){
    char theChar = (char) data;
    data = reader.read();
}

reader.close();

Réf: Exemple Java I18N

0
Mr.Green