Hallo,
wie können die Dateinamen unter Verwendung des korrekten Character Sets ausgeben werden?
Ein ähnlicher Beitrag zum Thema Character Set und Dateinamen hat mich leider nicht weiter gebracht.
http://www.java-forum.org/allgemeine-java-themen/144237-sonderzeichen-dateiname.html
Die Dateien werden aus verschiedenen Länder über eine Webanwendung upgeloadet.
Die Dateinamen enthalten länderspezifische Zeichen, welche wegen der Referenz von der Datenbank nicht geändert werden dürfen.
Meine Anwendung soll die Dateien übers FTP (Windows-Server) herunterladen und lokal abspeichern.
Der Code sieht folgendermassen aus:
Die Download funktioniert solange keine Spezialzeichen wie ü,ä,á,ĉ,ł,ń,ž,å,ĵ usw. im Dateinamen auftauchen.
Taucht ein Spezialzeichen im Dateinamen auf kann die Datei nicht gefunden werden.
Mit der Einstellung: ftpClient.setCharset("ISO-8859-1"); können einige Zeichen korrekt interpretiert werden, viele anderen aber nicht.
Die Einstellung ftpClient.setCharset("UTF-8"); bringt keine Verbesserung. Habe ebenfalls versucht nur die
Dateinamen (die Variable currentFileName) wie folgt umzuwandelt: new String(currentFileName.getBytes(), Charset.forName("UTF-8")); ohne Erfolg.
Hat jemand ein Lösungsvorschlag für das Problem? Danke!
wie können die Dateinamen unter Verwendung des korrekten Character Sets ausgeben werden?
Ein ähnlicher Beitrag zum Thema Character Set und Dateinamen hat mich leider nicht weiter gebracht.
http://www.java-forum.org/allgemeine-java-themen/144237-sonderzeichen-dateiname.html
Die Dateien werden aus verschiedenen Länder über eine Webanwendung upgeloadet.
Die Dateinamen enthalten länderspezifische Zeichen, welche wegen der Referenz von der Datenbank nicht geändert werden dürfen.
Meine Anwendung soll die Dateien übers FTP (Windows-Server) herunterladen und lokal abspeichern.
Der Code sieht folgendermassen aus:
Java:
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPFile;
import java.io.File;
import java.io.UnsupportedEncodingException;
public class FTPDownloadDirectoryTest {
public static void main(String[] args) throws UnsupportedEncodingException
{
String server = "";
int port = 21;
String user = "";
String pass = "";
//System.setProperty("file.encoding", "ISO-8859-1");
System.out.println("Default Encoding = " + System.getProperty("file.encoding")); // es wird UTF-8 ausgegeben
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect(server, port);
ftpClient.login(user, pass);
// use local passive mode to pass firewall
ftpClient.setPassive(false);
ftpClient.setType(FTPClient.TYPE_AUTO);
ftpClient.setAutoNoopTimeout(10000);
ftpClient.setCharset("ISO-8859-1");//("Windows-1252");
if(ftpClient.isCompressionSupported())
ftpClient.setCompressionEnabled(true);
System.out.println("Connected");
String remoteDirPath = "/pfad/auf/dem/server/";
String saveDirPath = "c:/temp/pictures/";
FTPFile[] subFiles = ftpClient.list(remoteDirPath);
int i = 1;
if (subFiles != null && subFiles.length > 0)
{
for (FTPFile aFile : subFiles)
{
String currentFileName = aFile.getName();
if (currentFileName.equals(".") || currentFileName.equals(".."))
{
// skip parent directory and the directory itself
continue;
}
try
{
String sLocal = saveDirPath + currentFileName;
String sRemote = remoteDirPath + currentFileName;
File f = new File(sLocal);
ftpClient.download(sRemote, f);
System.out.println(i+" DOWNLOADED: " + f.getAbsolutePath());
i++;
}
catch (IllegalStateException ex)
{
System.out.println(ex.getMessage());
}
}
}
// log out and disconnect from the server
ftpClient.disconnect(true);
System.out.println("Disconnected");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Die Download funktioniert solange keine Spezialzeichen wie ü,ä,á,ĉ,ł,ń,ž,å,ĵ usw. im Dateinamen auftauchen.
Taucht ein Spezialzeichen im Dateinamen auf kann die Datei nicht gefunden werden.
Mit der Einstellung: ftpClient.setCharset("ISO-8859-1"); können einige Zeichen korrekt interpretiert werden, viele anderen aber nicht.
Die Einstellung ftpClient.setCharset("UTF-8"); bringt keine Verbesserung. Habe ebenfalls versucht nur die
Dateinamen (die Variable currentFileName) wie folgt umzuwandelt: new String(currentFileName.getBytes(), Charset.forName("UTF-8")); ohne Erfolg.
Hat jemand ein Lösungsvorschlag für das Problem? Danke!