在上一篇我们把编码的理论知识讲了一遍,在这篇我将会根据这列理论知识对一些乱码问题进行具体分析并给出解决方法
操作系统中的编码
在window中默认文件编码格式是ANSI,而ANSI并不特指哪一个具体的编码,它在不同的语言环境会对应不同的编码,比如在简体中文系统中就是GBK编码,而在繁体中文就是Big5编码。我们可以在Windows记事本中通过另存为来指定保存时所用的编码,如果不知道默认会以GBK编码保存(简体中文环境)
而在Liunx系统中文件默认编码为UTF-8,所以会经常出现一个文件在两个操作系统之间转移的时候发生乱码,其实解决方法很简单
更改文件的读取编码为原系统的默认编码
在原系统中按照目标系统的编码重新保存
也可以先1,之后直接把文件转换成当前系统默认编码,这样就不用每次打开文件时重新选择读取编码
java中字符串乱码
java类中字符串乱码
在java中,一个程序需要先编译成class文件,然后在由java虚拟机进行执行。而在class文件中,字符串都是以UTF-8编码表示的,这个是java虚拟机的规范。Class文件格式采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构中只有两种数据类型:无符号数和表。而表结构中存在着一个叫CONSTANT_Utf8_info的表,用来存放字符串,而且是按UTF-8编码。所以乱码实际上是编译的时候你的文件编码跟javac使用的文件编码不一致而导致的。
javac默认的编码为操作系统的编码,这个编码在windows下位GBK,Linux下为UTF-8。在这里我用UTF-8编码格式把下面代码保存在windows系统中。
public class EncodingTest
{
public static void main(String[] args)
{
String s1 = "啊哈哈哈";
System.out.println(s1);
}
}
编译,运行,结果为乱码