J'essaie de convertir tous les caractères spéciaux de Windows en leur équivalent Unicode. Nous avons une application Flex, dans laquelle un utilisateur enregistre un texte enrichi, qui est ensuite envoyé par courriel à son destinataire par le biais d'un Emailer Java. Cependant, nous nous heurtons constamment aux caractères spéciaux de Word qui apparaissent dans l'e-mail sous la forme d'un ?
Jusqu'à présent, j'ai essayé
private String replaceWordChars(String text_in) {
String s = text_in;
// smart single quotes and apostrophe
s = s.replaceAll("[\\u2018|\\u2019|\\u201A]", "\'");
// smart double quotes
s = s.replaceAll("[\\u201C|\\u201D|\\u201E]", "\"");
// ellipsis
s = s.replaceAll("\\u2026", "...");
// dashes
s = s.replaceAll("[\\u2013|\\u2014]", "-");
// circumflex
s = s.replaceAll("\\u02C6", "^");
// open angle bracket
s = s.replaceAll("\\u2039", "<");
// close angle bracket
s = s.replaceAll("\\u203A", ">");
// spaces
s = s.replaceAll("[\\u02DC|\\u00A0]", " ");
return s;
Ce qui fonctionne, mais je ne veux pas encoder à la main tous les caractères Windows-1252 vers leur équivalent UTF-16 (en supposant que ce soit le jeu de caractères par défaut de Java).
Cependant, nos utilisateurs continuent à trouver de nouveaux caractères dans Microsoft Word que Java ne peut tout simplement pas gérer. J'ai donc cherché et cherché, et j'ai trouvé cet exemple
private String replaceWordChars(String text_in) {
String s = text_in;
try {
byte[] b = s.getBytes("Cp1252");
byte[] encoded = new String(b, "Cp1252").getBytes("UTF-16");
s = new String(encoded, "UTF-16");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
Mais lorsque je regarde l'encodage se dérouler dans le débogueur Eclipse, rien ne change.
Il doit y avoir une solution simple pour traiter le joli encodage de Microsoft avec Java.
Qu'en pensez-vous ?