以下是基本概念
1. 字符包括中文汉字英文字母日文假名等等,甚至包括表情符号。不管你看到的字符长什么样,是什么语,它们都是以二进制数保存的。
2. 编码:将字符转为二进制数存储的过程。
3. 解码:将二进制数转为字符显示的过程。
4. 编码方式:一套将字符与二进制数一一对应的规则。
简体字常用的编码方式为gbk。繁体字常用的编码方式为BIG5。日本汉字及假名常用的编码方式为shift-jis(sjis),如果你是光盘装的原版,游戏文件很可能就使用了此编码方式。
5. 字符集:顾名思义,字符的集合。一般而言,一种编码方式对应一种字符集。
sjis对应的字符集:约等于日文汉字+假名+英文字母+标点符号。
Gbk对应的字符集:约等于简体字+繁体字+日文汉字+假名+英文字母+标点符号。
Big5对应的字符集:约等于繁体字+英文字母+标点符号。
当然,一个字符集也可能对应多种编码方式,如utf8,utf16,utf32都使用unicode字符集。
不存在于某种编码方式对应的字符集中的字符,无法使用该编码方式编码。如“终”就不可以用sjis编码,因为日文只有汉字“終”。
以上的三个字符集之间无包含关系,所以两两不失真转换是不可能的。
6. 码集:字符集通过编码方式,对应的二进制数的集合。
简单说字符集是定义域,编码方式是函数,码集是值域。
7.同一个二进制数,解码时,使用不同的编码方式,可能转为不同的字符。
同一个字符,编码时,使用不同的编码方式,可能存储为不同的二进制数。
比如,gbk方式下,16进制数A3AC对应逗号(“,”),但是在sjis方式下,A3AC没有对应的字符。因此在使用sjis解码A3AC时,会把A3AC拆开解码为两个半角符号,A3对应“」”,AC对应“ャ”。
8.乱码的本质都是源文件编码方式和读取文件时使用的编码方式不匹配。