在日文操作系统下的Eclipse中,把程序内码设为GB2312,文件中有含中文的字符串,java文件能正常编译,并且把中文字符串正常输出。但如果在日文操作系统的控制台下,把控制台的内码设为GBK。
用javac -encoding gb2312 ABC.java 来编译程序
用Java ABC 来运行程序
出现的打印出的中文内容确实乱码。但如果在中文操作系统的控制台下,
用javac ABC.java 来编译程序
用Java ABC 来运行程序
出现的打印出的中文内容是正常的。有哪位达人能够解释一下上面现象的原因吗?
用javac -encoding gb2312 ABC.java 来编译程序
用Java ABC 来运行程序
出现的打印出的中文内容确实乱码。但如果在中文操作系统的控制台下,
用javac ABC.java 来编译程序
用Java ABC 来运行程序
出现的打印出的中文内容是正常的。有哪位达人能够解释一下上面现象的原因吗?
我在日文系统下装了中文字库。另外,在eclipse下,把程序内码设为GB2312,也是能正常运行的。
将源代码文件保存成一种特定的编码(Microsoft Windows 记事本保存选项里可以选择),设为 E1;
设控制台使用的编码为 E2(Microsoft Windows 控制面板里可以改变);2.
源文件的内容(源文件使用 E1 编码)为 System.out.println("XXXXXX");
确保 XXXXXX 中的每一个字符操作系统中都有已安装的字体文件可以将其显示出来;3.
使用 javac -encoding E1 source.java 编译,如果 E1 == E2,可直接用 javac source.java;
编译成字节码时,Java 将 使用 E1 编码的 XXXXXX 字符串 转换成 Java 自己的 Modified UTF-8 格式(可以使用 DataInputStream 和 DataOutputStream 的 readUTF 和 writeUTF 来存取这种格式)存到 .class 文件中。因此,不同于 C 语言,Java 在任何平台上的任何编译器上编译出来的 .class 文件都是平台独立的;4.
执行时,Java 从 .class 文件中获取字符串,将其转换成 UTF-16 格式存入内存中;
每一个 PrintWriter 内部都指明了一个编码格式,设为 E3,如果在创建 PrintWriter 时没有指定,或者使用的是 PrintStream(比如 System.out),那么 E3 = E2;
Java 将内存中的字符串转换成 E3 格式的字节流,然后输出给控制台;5.
控制台使用它自己的 E2 格式解码,如果 E3 != E2,就不能正常解码,常表现为出现乱码;
如果 E3 == E2,但是 XXXXXX 中存在一些字符,操作系统中没有对应的字体文件,则打印出一个特定的占位符。
而且,即使是改成了UTF-8的编码也是在eclipse下能正常运行,在dos下也不能正常运行,可能还是牵涉到了别的转码问题。
以下是我修改后的程序,修改点是增加了指定为中文编码的输出流:import java.io.PrintStream;
import java.io.PrintWriter;
public class TestCN{
public static void main (String args[]){
try{
PrintWriter pw = new PrintWriter(System.out,true);
PrintStream ps = new PrintStream(System.out, true, "GBK");
ps.println("欢迎。");
ps.println("HelloWorld");
System.out.println("欢迎。");
System.out.println("HelloWorld!");
}catch(Exception e){
e.printStackTrace();
}
}
}
这个程序在中文控制台下能正常打印。
在日文操作系统的eclipse下也能正常打印。
但在日文操作系统的控制台下,中文内容不能正常打印。我在日文操作系统的控制台的操作是:
编译程序:
javac -encoding GBK TestCN.java
运行程序 :
javac TestCN.java
运行的控制台的属性的current code page设为了:936(simplified Chinese GBK)
从运行结果上看,指定编码的输出流和没有指定编码的输出流的乱码是不一样的。
把源代码文件保存成GBK编码格式,这点没有问题,我使用UE来做的,我用GBK的码表对照确认过。
不改变控制台的编码,我的控制台的默认编码是ms932(也就是日文编码),不改应该不能正确显示吧。
不过我按照你的方式改完后还是不能正常打印出来。郁闷了,不过输入文件是可以的。你用过的英文 Microsoft Windows 操作系统和 Unix有这个问题,是因为系统没有安装中文字库吗?或者说不能把控制台的字符集设为中文?