解决:exlipse环境Maven因 filtering true使用系统属性设置UTF

编程入门 行业动态 更新时间:2024-10-11 13:22:52

解决:exlipse环境Maven因 filtering true使用系统<a href=https://www.elefans.com/category/jswz/34/1771415.html style=属性设置UTF"/>

解决:exlipse环境Maven因 filtering true使用系统属性设置UTF

 

exlipse环境Maven因<filtering>true使用系统属性设置UTF-8的xml文件为GBK导致:

com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。

 

Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [XXX.xml]; nested exception is com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:410)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:252)at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:609)at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:510)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)at XX.XX(XXXX.java:49)
Caused by: com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。at com.sun.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:687)at com.sun.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:435)at com.sun.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1735)at com.sun.apache.xerces.internal.impl.XMLEntityScanner.scanData(XMLEntityScanner.java:1234)at com.sun.apache.xerces.internal.impl.XMLScanner.scanComment(XMLScanner.java:778)at com.sun.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanComment(XMLDocumentFragmentScannerImpl.java:1038)at com.sun.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2988)at com.sun.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)at com.sun.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:117)at com.sun.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)at com.sun.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)at com.sun.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)at com.sun.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)at com.sun.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:243)at com.sun.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:347)at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429)at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)... 14 more

 

主要原因是:Eclipse,JDK 与Maven配合还不够默契:
       

        临时解决方法:我将<?xml version="1.0" encoding="UTF-8"?> 改为 <?xml version="1.0" encoding="GBK"?> 后可以临时解决编译运行不报错。
       

      最终解决办法:

解决方法如下:

1.检查开发软件的编码是否正确(比如UTF-8)

2.xml头文件设置的编码格式,检查 xml 的头文件和右键属性里面的编码是否一致,

 <?xml version="1.0" encoding="UTF-8"?>

3.使用maven修改默认模式,在 pom.xml 加入如下配置:

<build>  
    <resources>  
        <resource>  
            <directory>src/main/resources</directory>  
            <filtering>true</filtering>  
        </resource>  
    </resources>  

    <plugins>  
        <plugin>  
            <groupId>org.apache.maven.plugins</groupId>  
            <artifactId>maven-resources-plugin</artifactId>  
            <configuration>  
                <encoding>UTF-8</encoding>  
            </configuration>  
        </plugin>  
    </plugins>  
</build>

<filtering>true</filtering>是设置使用系统属性或项目属性代替文件属性值,因为获取了系统的编码为gbk,在构建项目是将mapping文件转码成了gbk,从而导致了编码问题。常情况下把这个属性设为<filtering>false</filtering>,使用用<filtering>true</filtering>再加<configuration><encoding>UTF-8</encoding></configuration> ,这个是网友分享的,本人的代码中确实有<filtering>true</filtering> ,但是加了maven-resources-plugin后报其它的错,我这次没有时间去继续研究这个,我用下面第4点解决了:


4.如果还不行,在pom.xml里设置默认编码

<properties>  
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
</properties> 

我使用<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>后,反复测试使用和移除这个配置,都起到了预期的效果,使用总结一下问题的原因如下:

        用文本编辑器将文件查看文件本身就是UTF-8的,只是eclipse自动识别错了,原因是改文件包所在工程确实配置了<filtering>true</filtering>,设置使用系统属性或项目属性代替文件属性值,大概是因为获取了系统的编码为gbk,在构建项目是将mapping文件转码成了gbk,从而导致了编码问题。
       

        我尝试了将出现问题的XML文件和它引用的XML文件都转码为BGK,并设置<?xml version="1.0" encoding="GBK"?>也编译运行不报错,所以再次证明是eclipse认为是xml文件中声明的编码与xml文件本身保存时的编码不一致,所以编译报错。但这个问题居然eclipse的Validation功能默认不报错,除非你确实把编码设置错误,比如编码本身就是UTF-8,但你声明<?xml version="1.0" encoding="GBK"?>,这时eclipse的Validation功能就检测出并显示报错了。
       

        所以,综上所述,说明Eclipse确实有些不完善的地方,或者说与Maven配合还不够默契,Maven启用了<filtering>true</filtering>,设置使用系统属性或项目属性代替文件属性值,Maven自己又不去检测文件的真实编码就是UTF-8,就使用系统属性默认编码GBK将文件转码编译或者设置了构建的文本编码等信息传给了IO流读取,然后JDK提供的解析XML的Jar包却还是按照<?xml version="1.0" encoding="UTF-8"?>来解析,遇到中文注释就报错:com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。
       

        我认为Maven私自设置使用系统属性或项目属性代替文件属性值,缺没有告诉Eclipse和JDK,他们没有能配合好,导致问题在编译前和Validation总也没能提前爆出,但是一切都没有完美的东西,所有的问题还是得靠我人自己去解决,提高自己的处理问题的能力,提高技术水平,不停学习领域知识,吸收增长经验是永恒的解决问题之道。

 

 

 

参考:

com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException_任何问题都能在StackOverflow找到答案!-CSDN博客_com.sun.apache.xerces.internal.impl.io.malform

com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException3字节的UTF-8序列的字节3无效_小异常的博客-CSDN博客_com.sun.apache.xerces.internal.impl.io.malform

com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException:3字节的UTF-8序列的字节3无效。_肉团子的博客-CSDN博客

com.sun.apache.xerces.internal.impl.io.MalformedByteSequenceException:Invalidbyte2of2-byte_业精于勤荒于嬉-CSDN博客

因配置资源文件而引起的“3字节的UTF-8序列的字节3无效”问题_mr_green1024的博客-CSDN博客_3字节的utf-8序列的字节3无效

xml3字节的UTF-8序列的字节3无效_weixin_30493321的博客-CSDN博客_androidmanifest.xml:3字节的utf-8序列的字节3无效。

 

更多推荐

解决:exlipse环境Maven因 filtering true使用系统属性设置UTF

本文发布于:2024-02-08 20:31:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674736.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:属性   环境   系统   Maven   exlipse

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!