Well, what's the "right" way to enforce an initial encoding for charset-less string-to-byte conversions and legacy streams? I still think that snippet of code is buggy, no matter if file.encoding is or isn't a supported settable property.
Besides, from what I see in JDK code base everything seems to be code in a way to allow external definition of file.encoding (comments inside System.c for example). Where is it stated that file.encoding is read-only? Dawid On Thu, Jul 5, 2012 at 3:09 AM, Xueming Shen <xueming.s...@oracle.com> wrote: > -Dfile.encoding=xyz is NOT a supported configuration. file.encoding is > supposed to be a read-only informative system property. > > -Sherman > > > On 7/4/2012 1:21 PM, Dawid Weiss wrote: >>> >>> There is a similar bug: >>> Bug 6795536 - No system start for file.encoding=x-SJIS_0213 >> >> Yeah... I looked at the sources in that package and there is at least >> one more place which converts a String to bytes using getBytes(). This >> seems to be a trivial fix in UnixFileSystem though. Anyway, bug ID for >> this is: >> >> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7181721 >> >> Dawid >> >>> In this case on Windows. >>> >>> -Ulf >>> >>> >>> Am 04.07.2012 14:43, schrieb Dawid Weiss: >>> >>> Hi folks. >>> >>> Run the following with -Dfile.encoding=UTF-16: >>> >>> public class TestBlah { >>> public static void main(String []) throws Exception { >>> TimeZone.getDefault(); >>> } >>> } >>> >>> This on linux (and any unixish system I think) will result in: >>> >>> java.lang.ExceptionInInitializerError >>> at java.nio.file.FileSystems.getDefault(FileSystems.java:176) >>> at sun.util.calendar.ZoneInfoFile$1.run(ZoneInfoFile.java:482) >>> at sun.util.calendar.ZoneInfoFile$1.run(ZoneInfoFile.java:477) >>> ... >>> >>> There is an encoding-sensitive part calling getBytes on the initial >>> path (and this screws it up): >>> >>> // package-private >>> UnixFileSystem(UnixFileSystemProvider provider, String dir) { >>> this.provider = provider; >>> this.defaultDirectory = >>> UnixPath.normalizeAndCheck(dir).getBytes(); >>> if (this.defaultDirectory[0] != '/') { >>> throw new RuntimeException("default directory must be >>> absolute"); >>> } >>> >>> Filed a bug for this but don't have the ID yet. >>> >>> Dawid >>> >>> >>> >