Comment puis-je vérifier si un tableau d'octets contient une chaîne Unicode en Java?

Donné un tableau d'octets, qui est soit une codé en UTF-8 chaîne de caractères ou des données binaires arbitraires, quelles sont les approches qui peuvent être utilisés en Java pour déterminer qui il est?

La matrice peut être généré par le code similaire à:

byte[] utf8 = "Hello World".getBytes("UTF-8");

Alternativement, il peut avoir été généré par un code similaire:

byte[] messageContent = new byte[256];
for (int i = 0; i < messageContent.length; i++) {
    messageContent[i] = (byte) i;
}

Le point clé est que nous ne savons pas ce que le tableau contient mais avez besoin de savoir pour remplir la fonction suivante:

public final String getString(final byte[] dataToProcess) {
    //Determine whether dataToProcess contains arbitrary data or a UTF-8 encoded string
    //If dataToProcess contains arbitrary data then we will BASE64 encode it and return.
    //If dataToProcess contains an encoded string then we will decode it and return.
}

Comment ceci pourrait-il être étendu pour couvrir également UTF-16 ou d'autres mécanismes d'encodage?

source d'informationauteur Iain | 2009-07-28