encodage de fichier de téléchargement de fichier de servlet
Je suis en utilisant le Apache Commons Fileupload outils standard de téléchargement de fichiers. Mon problème est que je ne peux pas obtenir le bon nom de fichier des fichiers téléchargés s'ils contiennent des caractères spéciaux (á, é, ú, etc.) Ils sont tous convertis ? des signes.
demande.getCharacterEncoding() dit UTF-8, mais les octets que je reçois dans la chaîne fileItem.getName() sont les mêmes pour tous mes caractères spéciaux.
Pouvez-vous m'aider quel est le problème?
(Quelques détails: l'utilisation de Firefox 3.6.12, Weblogic 10.3 sur Windows)
C'est mon extrait de code:
public CommandMsg(HttpServletRequest request) {
Enumeration names = null;
if (isMultipart(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List uploadedItems = upload.parseRequest(request);
Iterator i = uploadedItems.iterator();
FileItem fileItem = null;
while (i.hasNext()) {
fileItem = (FileItem) i.next();
if (fileItem.isFormField()) {
//System.out.println("isFormField");
setAttribute(fileItem.getFieldName(), fileItem.getString());
} else {
String enc = "utf-8";
enc = request.getCharacterEncoding();
String fileName = fileItem.getName();
byte[] fnb = fileItem.getName().getBytes();
byte[] fnb2 = null;
try {
fnb2 = fileItem.getName().getBytes(enc);
String t1 = new String(fnb);
String t2 = new String(fnb2);
String t3 = new String(fnb, enc);
String t4 = new String(fnb2, enc);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
setAttribute(fileItem.getFieldName(), fileItem);
}
}
} catch (FileUploadException ex) {
ex.printStackTrace();
}
//etc..
source d'informationauteur jabal
Vous devez vous connecter pour publier un commentaire.
J'ai eu le même problème et résolu comme ça.
Si vous avez basé votre code sur l'exemple fourni dans http://commons.apache.org/fileupload/streaming.html ensuite, vous devez assurez-vous de définir l'encodage UTF-8 dans les deux endroits ci-dessus.
Vous devez vous assurer que la console cible/fichier/base de données/quel que soit l'endroit où vous avez l'impression, en écriture et en insérant le nom du fichier à supporte l'UTF-8. Les points d'interrogation indiquent qu'il n'est pas configuré pour accepter les caractères UTF-8 et que la cible elle-même est conscient de cela. Sinon vous avez vu mojibake.
Depuis le détail de la cible est manquant dans la question, je ne peux pas faire beaucoup plus que de proposer à obtenir vous-même à travers cet article à comprendre ce qui se passe avec les personnages derrière les coulisses.
Résolu le problème en appelant ServletFileUpload de l'instance .setHeaderEncoding("ISO-8858-2") explicitement.
Pour ces charecters, u pouvez définir l'Encodage iso 8859-1". L'UTF-8 semble être pas de travail..
Si u r de ne pas fixer tout type de codage.. Puis machine linux prendra le codage par défaut qui est de l'UTF-8 et windows va prendre le codage compatible