Archive pour août 2011
Encodages des noms de fichiers en download – UTF-8 & firefox « *= »
Posté par D.E.S. dans capitalisation, GEEK le 26 août 2011
http://community.invisionpower.com/tracker/issue-22711-utf-8-file-name-bug/
1 |
header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"'); |
http://stackoverflow.com/questions/4736807/java-localized-filenames
en JAVA:
public static String getDownloadHeaderAttachment(String theFileName, String userAgent){
String HEADER_ATTACHMENT_BEGIN = « attachment;filename »;
String FILENAME_BEGIN = « = »;
String FILENAME_BEGIN_UTF8 = « *=UTF-8 » »;
String HEADER_ATTACHMENT_END = « ; »;
String UTF8 = « UTF-8 »;
Navigateur.Type typeNavigateur = Navigateur.getType(userAgent);
if (theFileName == null)
return null;
String finalHeaderAttachment = null;
try {
if (typeNavigateur == Navigateur.Type.INTERNET_EXPLORER)
finalHeaderAttachment = HEADER_ATTACHMENT_BEGIN + FILENAME_BEGIN + URLEncoder.encode(theFileName, UTF8) + HEADER_ATTACHMENT_END;
//eg. « attachment;filename=%E8%B3%BD%E8%BB%8A.zip; »
else if (typeNavigateur == Navigateur.Type.MOZILA_FIREFOX)
finalHeaderAttachment = HEADER_ATTACHMENT_BEGIN + FILENAME_BEGIN_UTF8 + URLEncoder.encode(theFileName, UTF8) + HEADER_ATTACHMENT_END;
//eg. « attachment;filename*=UTF-8 »%E8%B3%BD%E8%BB%8A.zip; »
else {
StringBuffer sb = new StringBuffer ();
for (int i = 0; i < theFileName.length(); i++){
char c = theFileName.charAt (i);
if (c>= 0 && c <= 255)
sb.append (c);
else
sb.append (‘_’);
finalHeaderAttachment = sb.toString ();
}
}
} catch (UnsupportedEncodingException e) {
finalHeaderAttachment = HEADER_ATTACHMENT_BEGIN + FILENAME_BEGIN_UTF8 + theFileName + HEADER_ATTACHMENT_END;;
}
return finalHeaderAttachment;
}
où
public class Navigateur {
public static enum Type {
INTERNET_EXPLORER, MOZILA_FIREFOX, SAFARI, NETSCAPE, GOOGLE_CHROME, FLOCK, UNKNOWN
}
public static Type getType(String userAgent) {
if (userAgent != null) {
if (userAgent.indexOf(« MSIE ») != -1)
return Type.INTERNET_EXPLORER;
else if (userAgent.indexOf(« Netscape ») != -1)
return Type.NETSCAPE;
else if (userAgent.indexOf(« Chrome ») != -1)
return Type.GOOGLE_CHROME;
else if (userAgent.indexOf(« Flock ») != -1)
return Type.FLOCK;
else if (userAgent.indexOf(« Safari ») != -1)
return Type.SAFARI;
else if (userAgent.indexOf(« Firefox ») != -1)
return Type.MOZILA_FIREFOX;
else
return Type.UNKNOWN;
}
return Type.UNKNOWN;
}
}
Note: équivalent de « URLEncoder.encode(theFileName, UTF8) »
Source: http://www.anyang-window.com.cn/jsp-page-download-features/
for (int i = 0; i < theFileName.length(); i++){
char c = theFileName.charAt (i);
if (c>= 0 && c <= 255)
sb.append (c);
else {
byte[] b;
try {
b = Character.toString(c).getBytes( « utf-8 »);
} catch (Exception e) {
System.out.println (e);
b = new byte [0];
}
for (int j = 0; j <b.length; j ++) {
int k = b[j];
if (k <0) k += 256;
sb.append (« % » + Integer.toHexString(k).toUpperCase ());
}
}
finalName = sb.toString ();
}
Août 2011 – Suisse
Posté par D.E.S. dans 360 et panoramas, PHOTO, Souvenirs, Voyages le 16 août 2011
2011-08-16