innosetup 生成bom utf8文件的一次解决方案

实在想不好这个标题该怎么写,就这么着吧。

事件还原

项目是用java+mysql开发的,用innosetup打成exe,jdk,tomcat,mysql都在里边了,mysql毕竟还是有点重,对于一些单机应用的,用h2完全足够了,就又打了个h2的版本,安装过程需要对更改数据库密码,并对数据库内容进行初始化(要执行一些sql),按照原来打mysql的思路,需要生成一个sql,然后用命令执行一下。sql文件可以正常生成,调用h2命令行的时候没成功,调用的类是org.h2.tools.RunScript,这是h2专门用来执行sql文件的一个类,后来把sql文件直接在命令行下跑了下,发现有乱码,通过文件转码后发现,innosetup生成的sql文件,如果是用SaveStringToFile生成的文件,执行的时候中文是乱码,如果用SaveStringToUTF8File,执行的时候报文件头部有非法字符,至此判断,应该是生成的是带BOM的UTF8文件。

查了下,大部分的思路都是写一些转换函数,有点麻烦。

理理思路,能不能从h2的角度去解决呢?

先看看h2的RunScript能不能指定文件编码呢,扒了源码,底层实现的方法上倒是有这个参数,但是从命令行进去的就没传这个值了。再找找,看有没有通过命令行运行单条sql的?发现同级有个Shell类,这个可以运行单条sql,这样就可以在安装过程中直接执行sql语句,就不用再执行sql文件了。

 

好了,这个问题就这么愉快的解决了。

 

条条大路通罗马,简单才是王道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值