galwiki吧 关注:43贴子:612
  • 15回复贴,共1

乱码的四种书写方法

只看楼主收藏回复

吧主的任务罢了


IP属地:北京1楼2024-11-10 20:57回复
    省流一图


    IP属地:北京2楼2024-11-10 20:58
    回复
      总的来说,此贴试图汇总一下各种乱码的形态以及可能的解决方法。
      对近期的游戏大概还是有用的。
      不过古早,要装字体或者改注册表那种不好说,仅供参考


      IP属地:北京3楼2024-11-10 20:59
      回复
        以下是基本概念
        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.乱码的本质都是源文件编码方式和读取文件时使用的编码方式不匹配。


        IP属地:北京4楼2024-11-10 21:01
        回复
          那么电脑是怎么判断的游戏文件该用哪种编码方式读取呢?
          假设源文件使用了unicode字符集对应的编码方式,电脑就会试图用对应的编码方式来解释。若没用unicode系列编码方式,则依据此设置决定使用何种编码方式来解释。

          语言>管理语言设置>管理>非unicode程序中所使用的当前语言
          设置为简中,就会使用gbk;是日语,就会使用sjis;是繁中,就会使用BIG5。
          Tips:打开记事本时显示的ANSI也受此设置影响。设置为简中时,所谓ANSI编码就指gbk。设置为其它语言时同理。

          点了这个beta版,就用UTF8
          所以转区的实际操作之一就是改变了读取文件使用的编码方式。比如说转日区就是尝试用sjis读取游戏文件。当然转区还包含了很多操作,比如伪造时区过验证等等


          IP属地:北京5楼2024-11-10 21:03
          回复
            要判断乱码是哪两种编码方式不匹配而产生的最简单的办法,是打开VsCode,随便打串字,然后右下角,空格后面,点击编码名称,通过编码保存,选择一种编码方式;

            然后再点刚才你点开的地方,通过编码重新打开,选择另一种编码方式;
            旮旯用的编码方式不外乎也就utf8,utf16,gbk,sjis,big5这么几种,排列组合选一选直到试出跟你的乱码样子差不多的乱码。此时你用来保存的编码方式就是游戏源文件编码方式,重新打开时,用的编码方式就是你用来读取的编码方式。
            知道是哪两种编码方式之后对症下药就行。假如你用来读取的编码方式是utf8,通解是关掉beta版。假如源编码方式是sjis,就转日区或者把非unicode程序中所使用的当前语言改成日语。假如是gbk,就不该转区,或者转回简中区,或者把非unicode语言改回简中。假如是BIG5,就转繁中区,或者把非unicode语言改成繁中。
            如果你觉得一个个试太麻烦,可以对照省流一图看你的乱码和图里哪个长得像。下面简单说说这些乱码的特征。


            IP属地:北京6楼2024-11-10 21:05
            回复
              半角码


              --樱之诗
              用sjis读取gbk编码的文件产生的乱码。特点是字符大多是半角假名。产生原理是gbk编码方式下,许多字符对应的二进制数,在sjis都没有对应字符(码位不使用)。因此,使用sjis读取时,只能将2byte gbk编码拆成两个1 byte来读取。Sjis下,1byte二进制数对应的字符大多落在半角假名区。
              所以说转区不是乱码万能解,看到这种情况就应优先考虑不转区。
              同样的,以sjis读取big5编码也会出现类似的乱码。


              IP属地:北京7楼2024-11-10 21:08
              回复
                菱框码



                从上至下分别是用utf8读取gbk,sjis,big5编码的文本产生的乱码。其特点是出现包着问号的菱形框。原理是这些编码方式的码集,都不处于utf8的码集范围内。
                总之,看到黑色菱形+中间白色问号就最好去检查一下你的utf8 beta开没开。
                如果没开,就检查非unicode语言。因为,使用big5读取sjis编码的字符也有相同的效果,原理同上,sjis码集,基本被big5码集的用户保留区包含。此时应当转日区。


                IP属地:北京8楼2024-11-10 21:10
                回复
                  问号码

                  将中日混合文段以sjis编码存储后,再次读取的结果。
                  特征是中文文段中有问号。且如果你对日语有了解,对照原始文段,会发现“?”对应的字符,都是日文中没有的汉字。(简中:“终”->日文汉字“終”,“结”->“結”,“连”->“連”,“轮”->“輪”,“灭”->“滅”,“许”->“許”)而其他汉字安然无恙
                  原因如上文所述。不存在于某种编码方式对应的字符集中的字符,无法使用该编码方式编码。如果强行使用此方式,将使用占位符替代这些字符完成编码。不同文本编辑器占位符不同,但长得都比较像问号。
                  汉化等过程中,转换编码保存文件时,需要谨慎操作。保存后,被转为”?”的字符是不可复原的。
                  如果报错中出现这种乱码,则应尝试将出现乱码的目录/文件名/...改为英文。可以看到,在乱码汇总图中,英文字符都可以正常显示。这是因为对拉丁字符的编码方式(ASCLL),早于对其它字符的编码方式出现,后出现的编码方式为了保证兼容性,都使用相同的二进制数对应英文字符。当然,这不代表你对全英文文件就可以随意使用任意编码方式解码,因为不同编码方式中,同一字符对应的二进制数位数不同。此处不再赘述。


                  IP属地:北京9楼2024-11-10 21:14
                  收起回复
                    古文码

                    以gbk读取sjis编码的乱码。特征为经常出现“丅”和“丄”。因为它们在gbk下对应的二进制数为8141和8142,这两个二进制数在sjis下对应全角逗号和句号。
                    这种乱码是需要通过转日区解决的。


                    IP属地:北京10楼2024-11-10 21:16
                    回复
                      繁体码

                      以Big5读取gbk的结果。唯一的特征大概是只有繁体字和菱框混杂。菱框出现原因同上。
                      解法是转简中区。


                      IP属地:北京11楼2024-11-10 21:17
                      回复
                        方框码

                        以gbk读取big5的结果。特征是常常出现方框。原因是big5码集的标点符号和常用汉字区和gbk的图形符号区重叠。而图形符号很大一部分是方框。
                        解法是转繁中区。


                        IP属地:北京12楼2024-11-10 21:18
                        回复
                          好了,乱码就这些
                          我滴吧主考核任务,完成力


                          IP属地:北京13楼2024-11-10 21:19
                          回复


                            IP属地:山东来自iPhone客户端14楼2024-11-10 21:51
                            回复
                              大神


                              IP属地:河北来自Android客户端15楼2024-11-16 20:23
                              回复