EDIT (2018) : La fratrie éditée La réponse de @xinyongCheng est une approche plus simple, et devrait être la réponse acceptée. .
Votre approche serait raisonnable si vous saviez que les octets sont dans le jeu de caractères par défaut de la plate-forme. Dans votre exemple, cela est vrai car k.getBytes()
renvoie les octets dans le jeu de caractères par défaut de la plate-forme.
Plus fréquemment, vous voudrez spécifier l'encodage. Cependant, il existe un moyen plus simple de le faire que la question que vous avez liée. L'API String fournit des méthodes qui permettent de convertir une chaîne en un tableau d'octets[] dans un encodage particulier. Ces méthodes suggèrent d'utiliser CharsetEncoder/CharsetDecoder. "lorsqu'un contrôle accru du processus de décodage [encodage] est nécessaire."
Pour obtenir les octets d'une chaîne dans un codage particulier, vous pouvez utiliser la méthode getBytes() :
byte[] bytes = k.getBytes( StandardCharsets.UTF_8 );
Pour mettre des octets avec un encodage particulier dans une chaîne, vous pouvez utiliser un constructeur de chaîne différent :
String v = new String( bytes, StandardCharsets.UTF_8 );
Notez que ByteBuffer.array()
est une opération facultative. Si vous avez construit votre ByteBuffer avec un tableau, vous pouvez utiliser ce tableau directement. Sinon, si vous voulez être sûr, utilisez ByteBuffer.get(byte[] dst, int offset, int length)
pour récupérer les octets du tampon dans un tableau d'octets.
3 votes
Eh bien, tu as essayé ?
6 votes
Oui, je l'ai fait et ça marche. Mais j'ai vu d'autres implémentations plus complexes, telles que stackoverflow.com/questions/1252468/
1 votes
@Doorknob et. al. Il manque l'encodage et son exemple (lorsque la syntaxe sera corrigée) fonctionnera, mais sa méthode n'est toujours pas correcte.