2010-03-25 106 views
1

我有一个MyFaces Facelets应用程序,其中页面编码有点粗糙。无论如何,它是使用Eclipse开发的,并且使用Ant构建,并且在Tomcat 2.0.26中运行良好。到现在为止还挺好。1字节UTF-8序列的无效字节1

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

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 build和maven build之间最可能的区别是什么?

似乎即使我已经在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> 
+0

*即使我已经在Netbeans和pom文件中配置了UTF-8,看起来好像还是可以显示你在pom中做了什么? – 2010-03-25 08:23:38

+0

查看更新的问题。 – 2010-03-25 09:42:47

+0

看起来不错。但是,如果没有“看到整体”,似乎很难说什么。以防万一,看看http://72.5.124.102/thread.jspa?messageID=10633886。 – 2010-03-25 11:25:57

回答

1

我有同样的问题!

我已经使用下面的代码段来解决它:

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

这不是一个好的解决方案。这将UTF-8字节的可疑有效性字符串编码,然后使用系统编码对它们进行解码。根据您运行此代码的机器,此操作可能会损坏数据或完全没有任何作用。 – McDowell 2010-07-07 19:09:35

3

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

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

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

+0

我有同样的问题 - 当在记事本++中打开xml文件时,它说文件是以“没有BOM的UTF-8”编码的。我试图将文件转换(使用记事本+ +)到“UTF-8” - 错误信息保持不变。我的xml声明是:<?xml version =“1.0”encoding =“UTF-8”?>所以我看到它,编码匹配声明并仍然出现上面给出的错误?或者我错过了什么? – AgentKnopf 2012-03-27 16:04:07

2

在Windows上很容易。如果您没有它,请获取Notepad ++,然后使用“编码”菜单更改编码。

相关问题