1字节UTF-8序列的字节1无效

时间:2010-03-25 07:57:04

标签: ant utf-8 maven facelets myfaces

我有一个MyFaces Facelets应用程序,页面编码有点粗糙。无论如何,它是用Eclipse开发的,并使用Ant构建,并且在Tomcat 2.0.26中运行良好。到目前为止一切都很好。

现在,我宁愿用Maven构建,所以我制作了几个pom文件,在Netbeans中打开并构建,现在我有一个可以部署的war文件。但是,在任何facelet页面上,它都会用

来解决
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence.
        at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(UTF8Reader.java:684)
        at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(UTF8Reader.java:554)
        at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(XMLEntityScanner.java:1742)

所以,我尝试了很多不同的东西,应用程序实际上运行简单的页面,没有facelet的东西。但是,如果我只使用Ant构建,那么一切都会运行...所以我的问题是:ant构建和maven构建之间最可能的区别是什么?

即使我在Netbeans和pom文件中配置了UTF-8,Netbeans最终也会在经过一些编辑后最终将facelet文件报告为ISO-8859-1。

我已经确定大多数中央库都是相同的版本(特别是xerces 2.3.0),我添加了一个无效的编码servlet过滤器。

并且,我宁愿修复maven构建并保留错误的页面,而不是相反......我打算引入Naven,而不是修复有错误的页面。

以下是pom.xml关于编码的内容:

基本上pom.xml有以下设置......

 <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>${project.build.sourceEncoding}</encoding>>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>

....

    <properties>
        <netbeans.hint.deploy.server>Tomcat60</netbeans.hint.deploy.server>
        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
    </properties>

3 个答案:

答案 0 :(得分:3)

  

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

原因是不是UTF-8的文件被解析为UTF-8。解析器可能遇到FE - FF范围内的字节值。这些值在UTF-8编码中无效。

可以通过将文件的XML声明更改为正确的编码或将文件重新编码为UTF-8来解决问题。

答案 1 :(得分:2)

在Windows上,它非常简单。如果没有Notepad ++,请获取它,并使用“编码”菜单更改编码。

答案 2 :(得分:1)

我遇到了同样的问题!

我使用以下代码解决了它:

String str = new String(oldstring.getBytes("UTF-8"));