Changer l'encodage d'un caractère
Bonjour,
je cherche à comprendre comment transformer un caractère encodé autre que UTF-8 dans son équivalent UTF-8
Mon exemple:
Je souhaite transformer cette chaîne
Info – changement d’adresse ==> Info - changement d'adresse
Le tiret et l'apostrophe sont encodés en WINDOWS-1252 (à priori) et si je les stocke ainsi, il ne seront pas reconnus pour une utilisation future puisque je gère uniquement de l'UTF-8
J'ai utilisé l'API juniversalchardet pour reconnaître l'encodage des caractères (ce n'est pas du 100% je suis d'accord, mais c'est toujours ça).
J'ai ensuite tenté cette manip consistant à manipulet des byte pour transformer en UTF-8:
Code:
1 2 3
| //c = un caractère String
//encoding = encodage trouvé par juniversalchardet
String newString = new String(decodeUtf8(c.getBytes(),encoding), "UTF-8"); |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| private static byte[] decodeUtf8(byte[] bytes, String sourceCharset){
Charset srcCharset = Charset.forName(sourceCharset);
Charset utf8charset = Charset.forName("UTF-8");
ByteBuffer inputBuffer = ByteBuffer.wrap(bytes);
// decoder selon l'encodage en parametre
CharBuffer data = srcCharset.decode(inputBuffer);
// encoder en utf-8
ByteBuffer outputBuffer = utf8charset.encode(data);
byte[] outputData = outputBuffer.array();
return outputData;
} |
Or voici ce que j'obtiens pour le tiret et l'apostrophe:
–
Â’
Ce ne sont pas les caractères - et ' souhaités.
Avez vous une idée de comment effectuer cette manip svp?
Merci