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后,这个问题不能复现,数据一直读取正常,暂时不知道为什么。

分类: 常见报错