为了玩某游戏,折腾了一天总算摸索出了一些头绪,在此简单分享下,首先是思路来源:;spm_id_from=333.337.0.0
其次如正渠道dlsite正在做活动,
众所周知大部分rpg小游戏都需要windows环境,尤其是日语windows环境
大佬提供了nw.js来加载游戏文件以实现游玩的思路
这里来解决下linux解压常遇到的编码问题
众所周知,中文windows使用gbk(gb2132)编码,而日文windows使用(shift-jis)编码
在windows下,常有大佬制作的le等转区工具,以解决乱码问题
但linux下一切都得靠自己,linux的默认编码使用utf-8
虽然大部分作者在制作游戏时,会考虑编码问题,主动作utf-8转码
但碰到未作任何处理的作品,就让人很难受了
今天碰到的一个游戏就是在文件名使用了shift-jis + ascii +未知编码的一个奇葩
所以不能借助现成工具,只能自写脚本来解决它
在说脚本方案前,先简单介绍下为什么不用convmv及iconv
这两个工具是linux下大名鼎鼎的转码工具
convmv仅转换文件名,iconv可以转换文件名的文件内容
对于文档内容乱码iconv可以很好工作
具体到压缩包的解压时,这两个工具都无法介入解压过程,因此无法使用
解压软件如p7z等,为提供在解压时,使用什么编码去识别文件名,默认系统用什么编码,它们就用什么编码解压
也就是说文件名在解压的过程中,它会被utf-8格式化,格式化过程中可能会丢失一些信息,导致再使用convmv转码时失败
所以,需要写一个脚本,强制解压时使用shift-jis进行解码,由于ascii可以看作shift-jis编码的一个子集,因此最简单的方案就是开启忽略报错,所有文件都使用shift-jis进行解码
以下是python3脚本,使用的都是python自带的包文件,复制即可使用
代码虽然内置了几种编码,为了缩写功能,实际生效的只有shift-jis,如果需要自己探索编码类型,按照这个注释做即可
#如果想看是哪些文件使用了混合编码,即使用shift-jis无法解码的,将errors='ignore'删除即可
return filename_bytes.decode(enc,errors='ignore')
就先这样吧
文件名称是这个顺序读取、写入的
压缩包(二进制)-》文件名字符序列(十六进制)-》解码(字符串)-》创建文件并写入解压数据(二进制)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/68603.html