[讨论]“乱码”出现的原理是啥?

CrazyNinja2431-avatar

CrazyNinja2431

2020-04-16T05:47:21+00:00

有时玩游戏(尤其是十多年前的老游戏)经常会蹦出乱码,一大串由各种偏旁部首组成的但根本不是汉字的缝合怪,我一直不太明白为啥会出现这些字,即使是bug了也应该弹混乱的汉字或英文字母吧,为啥会出现一大堆根本不存在的汉字[s:ac:汗]
Jissax-avatar

Jissax

[quote][tid=21361413]Topic[/tid] Post by [uid=61224246]网络上我重拳出击[/uid] (2020-04-19 13:54):

有时玩游戏(尤其是十多年前的老游戏)经常会蹦出乱码,一大串由各种偏旁部首组成的但根本不是汉字的缝合怪,我一直不太明白为啥会出现这些字,即使是bug了也应该弹混乱的汉字或英文字母吧,为啥会出现一大堆根本不存在的汉字[s:ac:汗][/quote]编码格式出错了
sammy..-avatar

sammy..

手持两把锟斤拷,口中疾呼烫烫烫?
编码问题
CrazyNinja2431-avatar

CrazyNinja2431

[quote][pid=414674293,21361413,1]Reply[/pid] Post by [uid=39805431]Tig3rkn[/uid] (2020-04-19 13:56):

手持两把锟斤拷,口中疾呼烫烫烫?
编码问题[/quote]我一直以为汉字是一个字一个字存在系统里的,即使乱套了也是乱弹汉字,照你这么说最底层的编码存的是笔画?乱了就各种“瞎写”了?[s:ac:汗]
Arrrash-avatar

Arrrash

无非两种情况吧,
1错误但正好撞成了别的有效字符编码,奇奇挂怪的汉字很多的
2无效编码,具体会怎么样看实现或者某些标准
King B-avatar

King B

俸俸伲购美病那种?
Gamexpert25-avatar

Gamexpert25

[quote][pid=414675110,21361413,1]Reply[/pid] Post by [uid=61224246]网络上我重拳出击[/uid] (2020-04-19 14:00):

我一直以为汉字是一个字一个字存在系统里的,即使乱套了也是乱弹汉字,照你这么说最底层的编码存的是笔画?乱了就各种“瞎写”了?[s:ac:汗][/quote]哪里有不存在的汉字???你没见过的汉字就是不存在的?只要电脑能显示出来的字都是存在的,不是按笔画拼的,电脑中存储的每一个汉字都有对应的ASCII码值,有相应的国家标准
WorldOfSandwich-avatar

WorldOfSandwich

还有盗版游戏的蜜汁翻译
azzone4-avatar

azzone4

我来科普一下吧。
计算机里面,普通程序不会保存字形信息,只会保存对应的编码,其实就是一个数字。比如你在NGA里面看到的汉字,其实是NGA把汉字对应的编码发给你的手机,然后你的手机去字体文件里面找这个编码对应文字图,然后贴出来。
这个过程中如果字体文件里面没这个编码,或者NGA用的一套编码系统不认识,那就会出乱码。
一般来说字体文件,或者编码用的码表会把常用的字安排的比较集中,很极端的数字对应的都是一些补充符号。有很多极端生僻字,或者单纯的偏旁部首等等。
比如举个例子,英文字母对应的都是200以内的数,汉字都是几千上万的。你一个中文程序放到只支持英文的系统里,几千上万的数都会被截断成好几个几百的数,然后映射成英文。但是英文字体里面除了字母还有各种标点符号,不过编号比较极端。这样你就能看见一堆奇怪的标点,中间偶尔夹杂几个字母。
joshuafps-avatar

joshuafps

编码和解码字符集不同或不兼容
xPlayer.-avatar

xPlayer.

[quote][pid=414675110,21361413,1]Reply[/pid] Post by [uid=61224246]网络上我重拳出击[/uid] (2020-04-19 14:00):

我一直以为汉字是一个字一个字存在系统里的,即使乱套了也是乱弹汉字,照你这么说最底层的编码存的是笔画?乱了就各种“瞎写”了?[s:ac:汗][/quote]汉字在程序里的编码可不是汉字
那是英文+数字字符
不同解码出对应汉字
如果解码失败就会出现乱码
NXT_HYPER-avatar

NXT_HYPER

字符编码问题,utf8和gb2312汉字不互通。还有个iso啥啥啥的直接不支持中文
sammy..-avatar

sammy..

[quote][pid=414675110,21361413,1]Reply[/pid] Post by [uid=61224246]网络上我重拳出击[/uid] (2020-04-19 14:00):

我一直以为汉字是一个字一个字存在系统里的,即使乱套了也是乱弹汉字,照你这么说最底层的编码存的是笔画?乱了就各种“瞎写”了?[s:ac:汗][/quote]比如甲用utf-8传给乙,乙用gbk去解码,然后结果就成乱码了。
Nrq-avatar

Nrq

字都是一个一个存的,哪有存偏旁部首的道理
TheDuck-avatar

TheDuck

[quote][pid=414675110,21361413,1]Reply[/pid] Post by [uid=61224246]网络上我重拳出击[/uid] (2020-04-19 14:00):

我一直以为汉字是一个字一个字存在系统里的,即使乱套了也是乱弹汉字,照你这么说最底层的编码存的是笔画?乱了就各种“瞎写”了?[s:ac:汗][/quote]是一个字一个字存在电脑里的[s:ac:哭笑]
你知道计算机里都是以0和1的格式存储的吧。打个比方,有两种编码格式,格式a中“水”这个字对应1010,格式b中1010对应的是“火”这个字。
它们存在电脑里都是1010,实际显示哪个字看你用哪种格式解读,我说明白了吗[s:ac:哭笑]
Waccum-avatar

Waccum

只是你见的少,你玩的游戏字库正好很全。所以编码错误的情况下,检索到一些错误但存在的汉字。

最近新上的“奥日”,来体会一下口口吧!
cloudy!-avatar

cloudy!

[quote][pid=414676230,21361413,1]Reply[/pid] Post by [uid=12938436]yuuyuuyyuu[/uid] (2020-04-19 14:05):

还有盗版游戏的蜜汁翻译[/quote]你是说魔兽争霸重置版吗[s:ac:哭笑][s:ac:哭笑][s:ac:哭笑]
The Alpha-avatar

The Alpha

举个例子,我有一个字对你说,请你翻到新华字典第100页,看第三个字。
结果你抄起一本牛津词典,翻到100页,看第三个字。
结果就是我说的字和看到的字不一样。
Kkwateh-avatar

Kkwateh

字符是以二进制存储在计算机系统中的
有两点:
不是字符的二进制数据被当做字符解读可能导致乱码
存储的编码和解读的编码不同可能导致乱码
Fuzzy_samurai-avatar

Fuzzy_samurai

[quote][pid=414675110,21361413,1]Reply[/pid] Post by [uid=61224246]网络上我重拳出击[/uid] (2020-04-19 14:00):

我一直以为汉字是一个字一个字存在系统里的,即使乱套了也是乱弹汉字,照你这么说最底层的编码存的是笔画?乱了就各种“瞎写”了?[s:ac:汗][/quote]最底层存的都是0 1对应到内存都是bit 怎么会有汉字 笔画……