Archive pour août 2011

Encodages des noms de fichiers en download – UTF-8 & firefox « *= »

http://community.invisionpower.com/tracker/issue-22711-utf-8-file-name-bug/

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;
}

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 ();
}

Pas de commentaire

Août 2011 – Suisse

2011-08-16

Pas de commentaire