Bo's blog

Thursday, November 11, 2010

Java encoding with "file.encoding"

referenced from: http://bugs.sun.com/view_bug.do?bug_id=4163515

Submit Date05-AUG-1998
Description
In JDK1.2fcs, even if you set -Dfile.encoding option,  it doesn't affect ByteToChar converter. In case of JDK1.2beta4, -Dfile.encoding option affects both ByteToChar converter and CharToByte converter.  
Run the following program. --- program ---
import sun.io.CharToByteConverter;
import sun.io.ByteToCharConverter;
public class DefaultEncoding {
public static void main (String args[]) {
System.out.println(ByteToCharConverter.getDefault().toString());
System.out.println(CharToByteConverter.getDefault().toString());
}
}
--- result ---
Win32, JDK1.2fcs_D:
C:\>java DefaultEncoding
ByteToCharConverter: SJIS
CharToByteConverter: SJIS

C:\>java -Dfile.encoding=EUC_JP DefaultEncoding
ByteToCharConverter: SJIS
CharToByteConverter: EUC_JP

Win32, JDK1.2beta4_K:
C:\>java DefaultEncoding
ByteToCharConverter: SJIS
CharToByteConverter: SJIS

C:\>java -Dfile.encoding=EUC_JP DefaultEncoding
ByteToCharConverter: EUC_JP
CharToByteConverter: EUC_JP
Work Around
N/A
Evaluation
This is not a bug.  The "file.encoding" property is not required by the J2SE platform specification; it's an internal detail of Sun's implementations and should not be examined or modified by user code.  It's also intended to be read-only; it's technically impossible to support the setting of this property to arbitrary values on the command line or at any other time during program execution.  The preferred way to change the default encoding used by the VM and the runtime system is to change the locale of the underlying platform before starting your Java program.