0.前言
今天拿出前面写的一段程序来测试,发现竟然报错,
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence
明明什么都没改动,却报这个错误。通过百度和自己瞎折腾终于搞定了这个报错,结果按照改正之前的配置运行它又不报错了,一堆问号。
测试文件:
public void test() throws Exception{ //获得核心配置文件 InputStream in = Resources.getResourceAsStream("mybatis-config.xml"); //获得session工厂对象 SqlSessionFactoryBuilder builder =new SqlSessionFactoryBuilder(); SqlSessionFactory factory=builder.build(in); SqlSession session =factory.openSession(); //获得会话对象 List<Students> students =session.selectList("listAllStudents"); System.out.println(students); //正常输出 session.close(); //关闭 }
先说下遇到的问题和解决办法。
1.问题及解决办法
出现这个的报错的主要原因是mybatis-config.xml编码,解法方法都要从编码格式这里考虑。
方法一:用txt打开xml文件,然后重新保存xml为UTF-8格式。然后再次重新测试运行
注:这个方法我测试后没有效果
方法二:因为我们在读取xml文件时遇到了非法字符,我们把xml文件中所有的中午字符包含注释全部删除掉,然后重新编译运行,经测试正常使用。
方法三:我又想有中文注释又想正常运行怎么办?然后遇到了最奇葩的解决方法。
<?xml version="1.0" encoding="UTF-8"?>
我把上面的代码改成下面的这样后:
<?xml version="1.0" encoding="UTF8"?>
然后发现可以加中文注释了。。。
但是不推荐,因为默认写法就是UTF-8。
方法四:设置全文项目编码,把GBK设置成UTF-8,然后重新保存文件,重启IDEA,clean、build操作,发现终于可用了。
2.后记
再设置了UTF-8格式后,虽然是正常了,但是把格式改回GBK后,这个问题不能复现,数据一直读取正常,暂时不知道为什么。