Link to home
Start Free TrialLog in
Avatar of kylar
kylar

asked on

File misbehaving with Unicode Surrogate Pairs

I have two scenarios:

#1) I can create a file using a different program (not java) and java is unable to read this file
#2) Java can't create a file using a unicode surrogate pair.

I've tried this on solaris and Macosx, using HFS and NFS, both local and over TCP.

this was saved properly in UTF-8 and was executed using -Dfile.encoding="UTF-8"

See the file below, in one I use the actual char, in the other I use the encoded version (both should work out to the same UTF8 String).

Why can't java open or create this file? What am I doing wrong? I *know* the filesystem can deal with the file, since I can create it using a different mechanism.
public class FreakinUTF8{
    public static void main(String args[]){
      String tmp = "/tmp/\uD85C\uDD0D.txt";
      //String tmp = "/tmp/\
.txt";//this is the encoded char.
      File newFile = new File(tmp);
      boolean b = false;
      try {
        b = newFile.createNewFile();
        System.out.println("Created:"+b+" and exists:"+newFile.exists());
      } catch (IOException e) {
        e.printStackTrace();
      }
 
    }
  }

Open in new window

Avatar of CEHJ
CEHJ
Flag of United Kingdom of Great Britain and Northern Ireland image

It's OK for me. See below:
goose@seegobin:/tmp$ ll
total 68
drwxrwxrwt  9 root  root  4096 2009-05-08 21:04 .
drwxr-xr-x 22 root  root  4096 2009-04-13 09:09 ..
-rw-r--r--  1 goose goose  973 2009-05-08 20:59 FreakinUTF8.class
-rw-r--r--  1 goose goose  421 2009-05-08 20:59 FreakinUTF8.java
drwx------  3 goose goose 4096 2009-05-08 17:12 gconfd-goose
drwxr-xr-x  2 goose goose 4096 2009-05-08 21:01 hsperfdata_goose
drwxrwxrwt  2 root  root  4096 2009-05-08 17:12 .ICE-unix
drwx------  2 goose goose 4096 2009-05-08 17:12 orbit-goose
drwx------  2 goose goose 4096 2009-05-08 19:16 plugtmp
-rw-------  1 goose goose  981 2009-05-08 21:04 purple3GGPTU
-rw-------  1 goose goose  106 2009-05-08 17:12 serverauth.iRnPqXRSMp
drwx------  2 goose goose 4096 2009-05-08 17:12 ssh-UrGtFI2893
-r--r--r--  1 root  root    11 2009-05-08 17:12 .X0-lock
drwxrwxrwt  2 root  root  4096 2009-05-08 17:12 .X11-unix
-rw-------  1 goose goose  207 2009-05-08 17:12 .xfsm-ICE-H69RTU
goose@seegobin:/tmp$ java FreakinUTF8
Created:true and exists:true
goose@seegobin:/tmp$ ll
total 68
drwxrwxrwt  9 root  root  4096 2009-05-08 21:05 .
drwxr-xr-x 22 root  root  4096 2009-04-13 09:09 ..
-rw-r--r--  1 goose goose  973 2009-05-08 20:59 FreakinUTF8.class
-rw-r--r--  1 goose goose  421 2009-05-08 20:59 FreakinUTF8.java
drwx------  3 goose goose 4096 2009-05-08 17:12 gconfd-goose
drwxr-xr-x  2 goose goose 4096 2009-05-08 21:05 hsperfdata_goose
drwxrwxrwt  2 root  root  4096 2009-05-08 17:12 .ICE-unix
drwx------  2 goose goose 4096 2009-05-08 17:12 orbit-goose
drwx------  2 goose goose 4096 2009-05-08 19:16 plugtmp
-rw-------  1 goose goose  981 2009-05-08 21:04 purple3GGPTU
-rw-------  1 goose goose  106 2009-05-08 17:12 serverauth.iRnPqXRSMp
drwx------  2 goose goose 4096 2009-05-08 17:12 ssh-UrGtFI2893
-rw-r--r--  1 goose goose    0 2009-05-08 21:05 \
.txt
-r--r--r--  1 root  root    11 2009-05-08 17:12 .X0-lock
drwxrwxrwt  2 root  root  4096 2009-05-08 17:12 .X11-unix
-rw-------  1 goose goose  207 2009-05-08 17:12 .xfsm-ICE-H69RTU

Open in new window

Unfortunately the character doesn't work on this site, but i can tell you it's there
Avatar of kylar
kylar

ASKER

What kind of box are you running it on? What kind of storage?
what version of java are you using? Have you tried latest?

it used to be a problem but was fixed ages ago

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4845710

what result exactly are you getting?

Avatar of kylar

ASKER

I've tried with 1.5 and 1.6 on Solaris & MacOSX. I get this result on:

MacOSX when using locally attached HFS storage
MacOSX when using remote NFS storage
Solaris when using remote NFS storage

but not Solaris using local NFS storage.

I get an IOException when I run it:

Exception in thread "main" java.io.IOException: No such file or directory
      at java.io.UnixFileSystem.createFileExclusively(Native Method)
      at java.io.File.createNewFile(File.java:883)
      at UTF8Test.<init>(UTF8Test.java:20)
      at SymlinkTest.main(SymlinkTest.java:3)

Do you get the same errors *outside Java*
I'd suggest raising a bug with Sun

ASKER CERTIFIED SOLUTION
Avatar of kylar
kylar

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
sorry yes apple :)