问题:
项目在idea中编译运行没有问题,数据能入库。但是当java项目打包成jar包,运行该jar包后 下图蓝色的代码行报错:
java.nio.charset.MalformedInputException: Input length = 2
原因:
编码问题 , reader.readLine()是一行一行读的,有些中文如果不是UTF-8编码可能字节不到2,解析出现“半个中文的问题”,所以报错。
解决:
在windows上启动的bat脚本加下面这句话,进行编码转换,转成UTF-8
注:
半个中文问题:
说白了,会出现java.nio.charset.MalformedInputException异常,原因是“半个中文问题”。分析上面的程序,就是因为CharsetDecoder对ByteBuffer进行解码的时候,不能保证都可以成功解码成汉字,也许里面有“半个汉字“也说不准。说以当有半个汉字的时候就会出现该异常。
举个例子,因为在GBK中字母占1byte,汉字占2byte。如"我ABC汉字d"这个字符串,截取5个字节的时候,应该是"我ABC",而截取8个字节的时候,应该是"我ABC汉",而不应该是"我ABC汉?",其中"?"为半个汉字,可理解为向前截取 。所以就会报异常。 (备注:将字符编码GBK改为UTF-8,则每个中文长度按3个字符计算 )