Is anyone else able to use non-ascii chars in filenames when using VFS
2.2.0?
As indicated below, the created file has a ? in the resultant name
rather than the original non-ascii character.
Thanks
On 16/03/2015 11:07, Geoff Watters wrote:
All
I am using*commons-vfs2-2.0.jar* and am running into problems when
file names contain non-ascii characters. According to
https://issues.apache.org/jira/browse/VFS-305 this has been
fixed/shipped in 2.0. In my environment I am able to create such file
names when using ftp on the command-line (Red Hat Enterprise Linux
Server release 5.8 (Tikanga)).
When I execute the following sample code, I get the output shown below.
public class FtpTest {
public static void main(String[] args) throws FileSystemException
{
String host=hhh;
String user = uuu;
String password = ppp;
String destDir = /tmp;
FileSystemOptions opts = new FileSystemOptions();
FtpFileSystemConfigBuilder.getInstance().setControlEncoding(opts,
UTF-8);
DefaultFileSystemManager manager = new
DefaultFileSystemManager();
manager.addProvider(ftp, new FtpFileProvider());
manager.init();
String root=ftp://+user+:+password+@+host+destDir;
// Specify a number of directories that should be created
under destDir
String[] lRoots = new String[4];
lRoots[0]= root+/ftpDebug;
lRoots[1]= root+/ftp\u7684Debug; // insert a non-ascii char
lRoots[2]= root+/ftp\u7685Debug; // insert a different
non-ascii char
lRoots[3]= root+/ftp\u7684Debug; // insert the same
non-ascii char
// Verify the ControlEncoding
System.out.println(ControlEncoding is
+FtpFileSystemConfigBuilder.getInstance().getControlEncoding(opts));
int dirCount=0;
for (String lRoot: lRoots) {
System.out.println(dirCount+) Process directory
[+lRoot+]);
FileObject newDir = manager.resolveFile(lRoot, opts);
if (!newDir.exists()) {
try {
System.out.println(dirCount+) +lRoot+ ::Dir
Does Not Exist so Create It );
newDir.createFolder();
if (newDir.exists())
System.out.println(dirCount+) +lRoot+
::Creation Successful );
else
System.out.println(dirCount+) +lRoot+
::Creation Fails );
}
catch (Exception ex) {
System.out.println(dirCount+) +lRoot + raised
+ex);
}
}
else
System.out.println(dirCount+) +lRoot+ ::Dir Already
Exists );
dirCount++;
}
}
}
The output from running the above is:-
ControlEncoding is UTF-8
0) Process directory [ftp://uuu:ppp@hhh/tmp/ftpDebug]
0) ftp://uuu:ppp@hhh/tmp/ftpDebug ::Dir Does Not Exist so Create It
0) ftp://uuu:ppp@hhh/tmp/ftpDebug ::Creation Successful
1) Process directory [ftp://uuu:ppp@hhh/tmp/ftpªDebug]
1) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Dir Does Not Exist so Create It
1) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Creation Successful
2) Process directory [ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug]
2) ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug ::Dir Does Not Exist so
Create It
2) ftp://uuu:ppp@hhh/tmp/ftp%Gçš…%@Debug raised
org.apache.commons.vfs2.FileSystemException: Could not create
folder ftp://uuu:***@hhh/tmp/ftp%Gçš…%@Debug.
3) Process directory [ftp://uuu:ppp@hhh/tmp/ftpªDebug]
3) ftp://uuu:ppp@hhh/tmp/ftpªDebug ::Dir Does Not Exist so Create It
3) ftp://uuu:ppp@hhh/tmp/ftpªDebug raised
org.apache.commons.vfs2.FileSystemException: Could not create folder
ftp://uuu:***@hhh/tmp/ftpªDebug;.
After step 1) I see a directory called*/tmp/ftp?Debug*.
I think this is causing the subsequent creation problem in step 2) and
step 3).
When a directory such as *ftp\u7684Debug* does exist, then
*exists*() returns the correct result of true, but *createFolder*()
creates a directory with name *ftp?Debug*.
Thanks in advance
Geoff
-
To unsubscribe, e-mail: user-unsubscr...@commons.apache.org
For additional commands, e-mail: user-h...@commons.apache.org