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.
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);
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
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 = اللاف
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