在游玩rpg游戏时,经常遇到乱码问题,这也是让很多人头疼的事情。以最近的经历为例,看到一个特别中意的黄油,资源网站也找不到,好不容易从网上扒下来之后,发现还是乱码,玩到一半提示xxx素材缺失。下面来分析一下这个问题:
1、造成文件缺失的到底是什么原因?
根据rpgmaker的提示,有两种可能:
- 第一种可能,根据设定好的素材文件名找不到这个素材文件。也就是说乱码发生在文件名上面,因为文件名乱码了,所以按照素材名找不到这个素材。
- 第二种可能,找到了素材文件,但文件内部数据乱码读取不了。也就是说乱码发生在文件内部,因为数据乱码了,所以按照素材名读取的素材出问题。
两种原因是递进关系,首先从最浅显的可能入手,也就是文件名乱码导致找不到素材文件。
2、如何解决第一种可能?(文件名乱码)
既然是文件名出的问题,那么就要找到素材文件都放在哪里。下面是一个rpg游戏的素材文件夹目录,一般放在www目录下面
可以看到游戏素材文件被分成了audio, data, img等目录,具体的素材文件就存储在其中,一般是以rpg素材的打包形式(rpgmvx)或者原文件形式(mp3, jpeg...)存储。游戏出问题的素材文件也就在其中,只需要把它们的文件名从乱码恢复成正常的日文即可。
对于这一部分,我用了Python进行编程,代码贴在下面,懂一点基本的编程知识就能解决问题了,把path变量改成自己的游戏目录,然后直接执行就可以了。
path = r"X:\2ACG\G-HS2108061-v3.3\RJ335221\www"
list = os.listdir(path)
pprint(list)
for root, dirs, files in os.walk(path):
print(root)
for d in dirs:
print(os.path.join(root, d))
for file in files:
print(os.path.join(root, file))
old_name = os.path.join(root, file)
try:
new_name = old_name.encode('gbk').decode('shift_jis')
except:
continue
else:
os.rename(old_name,new_name)
另外附录一些踩坑记录。
- 遇到问题:如果对已经是被修复的日文,或者说对日文再进行gbk编码,然后再shift-jis解码,就会报错
UnicodeDecodeError: 'shift_jis' codec can't decode byte 0x87 in position 69: illegal multibyte sequence
解决方法:保证原来的路径里没有日文,保持日文是在gbk下乱码的状态
3、关于第二种可能(文件内部数据乱码)
根据前面的实践可以知道,因为rpgmaker里是按照日文去读取文件的,所以rpgmaker在修复乱码之前会提示找不到文件。
错误发生在读取文件的过程中,rpgmaker只是按照名字读取文件,至于文件里的编码不用修复,修复乱码文件名后,rpgmaker可以正常读取出来。也就是说不存在文件内部数据乱码的问题,好!
4、总结
rpgmaker不是一定需要转区工具才能正常运行,只需要把素材文件名改成正常的文件名就可以了。前提是把乱码转换成正常的日文。关于日文乱码的原理,可以看我上一篇帖子
开车之道:简单乱码恢复攻略-茶馆-ACG里世界 (acgn.zone.)
这个人很懒,什么也没有留下!