-
Bug
-
Resolution: Duplicate
-
P4
-
None
-
1.3.0, 1.3.1
-
x86
-
windows_nt
Name: rl43681 Date: 09/08/2000
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)
Consider the following program:
import java.io.*;
public class Tmp {
public static void main(String[] args){
System.out.println(System.getProperty("file.encoding"));
System.out.println('\u00b2');
}
}
when run (from the Command Prompt, i.e. DOS window) it produces:
J:\borsotti\jtest>java Tmp
Cp1252
|
the character displayed on the second line is actually rendered as
a grey box with diagonal black lines in the DOS window.
This is what it should be cosidering that the file encoding that
is displayed on the first line of output is Cp1252, which is not
correct. I.e. java thinks that the underlying encoding is Cp1252
and encodes 00b2 (which is superscript 2) in it, outputting
a byte whose value is 0xb2. When that is sent to the window driver,
the driver interprets it as if it were a Cp437 character, and selects
the appropriate glyph, which is a grey box.
The problem is that when the java VM has been run from a DOS window,
it does not take into account that the encoding for the standard
output is NOT the default one for NT, and not even the one of DOS
(which should be the one defined in config.sys, that for my PC is
COUNTRY=039,850), but seems to be the standard default DOS one.
With this bug, instead of seeing a superscript 2, you see a grey box.
To see the correct output there is a need to run the program in
this way:
J:\borsotti\jtest>java -Dfile.encoding=Cp437 Tmp
Cp437
2
This, however, is not a solution because it would affect all the
output, not only the one directed to the standard output.
(Review ID: 109421)
======================================================================
java version "1.3.0"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.0-C)
Java HotSpot(TM) Client VM (build 1.3.0-C, mixed mode)
Consider the following program:
import java.io.*;
public class Tmp {
public static void main(String[] args){
System.out.println(System.getProperty("file.encoding"));
System.out.println('\u00b2');
}
}
when run (from the Command Prompt, i.e. DOS window) it produces:
J:\borsotti\jtest>java Tmp
Cp1252
|
the character displayed on the second line is actually rendered as
a grey box with diagonal black lines in the DOS window.
This is what it should be cosidering that the file encoding that
is displayed on the first line of output is Cp1252, which is not
correct. I.e. java thinks that the underlying encoding is Cp1252
and encodes 00b2 (which is superscript 2) in it, outputting
a byte whose value is 0xb2. When that is sent to the window driver,
the driver interprets it as if it were a Cp437 character, and selects
the appropriate glyph, which is a grey box.
The problem is that when the java VM has been run from a DOS window,
it does not take into account that the encoding for the standard
output is NOT the default one for NT, and not even the one of DOS
(which should be the one defined in config.sys, that for my PC is
COUNTRY=039,850), but seems to be the standard default DOS one.
With this bug, instead of seeing a superscript 2, you see a grey box.
To see the correct output there is a need to run the program in
this way:
J:\borsotti\jtest>java -Dfile.encoding=Cp437 Tmp
Cp437
2
This, however, is not a solution because it would affect all the
output, not only the one directed to the standard output.
(Review ID: 109421)
======================================================================
- duplicates
-
JDK-4464393 Special characters not echoed back correctly
- Closed
-
JDK-4153167 separate between ANSI and OEM code pages on Windows
- Closed