You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Geoff Watters <ge...@oracle.com> on 2015/03/16 12:07:33 UTC
[vfs] vsf2.2.0: non-ascii chars in file name are not handled by createFolder()
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
Resend: [vfs] vsf2.2.0: non-ascii chars in file name are not handled
by createFolder()
Posted by Geoff Watters <ge...@oracle.com>.
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-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org