AppFuse使用“mvn native2ascii:native2ascii”进行文件编码格式的转换。但是转换后,界面显示仍然是乱码。打开ApplicationResources_zh_CN.properties文件,里面是中文貌似已经转换为ascii。但是仔细看,ApplicationResources_zh_CN.properties文件仍然是GB18030。
在网上找了找,如果在%PROJECT_HOME%运行:
native2ascii -encoding UTF-8 .\src\main\resources\ApplicationResources_zh_CN.properties .\src\main\webapp\WEB-INF\classes\ApplicationResources_zh_CN.properties
则显示正常。
AppFuse的pom.xml里明明制定了UTF-8,为什么文件就变成了GB18030呢?
1
<plugin>
2
<groupId>org.codehaus.mojo</groupId>
3
<artifactId>native2ascii-maven-plugin</artifactId>
4
<version>1.0-alpha-1</version>
5
<configuration>
6
<dest>target/classes</dest>
7
<src>src/main/resources</src>
8
</configuration>
9
<executions>
10
<execution>
11
<id>native2ascii-utf8</id>
12
<goals>
13
<goal>native2ascii</goal>
14
</goals>
15
<configuration>
16
<encoding>UTF8</encoding>
17
<includes>
18
ApplicationResources_ko.properties,
19
ApplicationResources_no.properties,
20
ApplicationResources_tr.properties,
21
ApplicationResources_zh*.properties
22
</includes>
23
</configuration>
24
</execution>
25
<execution>
26
<id>native2ascii-8859_1</id>
27
<goals>
28
<goal>native2ascii</goal>
29
</goals>
30
<configuration>
31
<encoding>8859_1</encoding>
32
<includes>
33
ApplicationResources_de.properties,
34
ApplicationResources_fr.properties,
35
ApplicationResources_nl.properties,
36
ApplicationResources_pt*.properties
37
</includes>
38
</configuration>
39
</execution>
40
</executions>
41
</plugin> 查看JDK的native2ascii文档:
-encoding encoding_name
Specify the encoding name which is used by the conversion procedure. The default encoding is taken from System property file.encoding. The encoding_name string must be taken from the first column of the table of supported encodings in the Supported Encodings document.
原来执行native2ascii时,默认取系统的file.encoding做为编码格式。试着输出file.encoding,果然是GB18030。难道是AppFuse执行“native2ascii:native2ascii”时,没有制定编码?
反编译repository\org\codehaus\mojo\native2ascii-maven-plugin\1.0-alpha-1\native2ascii-maven-plugin-1.0-alpha-1.jar!\org\codehaus\mojo\native2ascii\Native2AsciiMojo.class
1
protected void executeAnt()
2
{
3
Project antProject = new Project();
4
antProject.setName("native2ascii");
5
Native2Ascii antTask = new Native2Ascii();
6
antTask.setProject(antProject);
7
antTask.setSrc(src);
8
antTask.setDest(dest);
9
antTask.setEncoding(encoding);
10
antTask.setExt(ext);
11
antTask.setExcludes(excludes);
12
antTask.setIncludes(includes);
13
antTask.execute();
14
} 代码也很简单,调用Ant的API实现转换。估计Ant也不会出现什么问题,为什么会使用系统默认的编码呢?试着输出encoding,发现encoding居然为null!会不会是从pom.xml里没有取到encoding的设置呢?
修改pom.xml,尝试增加encoding节点
1
<groupId>org.codehaus.mojo</groupId>
2
<artifactId>native2ascii-maven-plugin</artifactId>
3
<version>1.0-alpha-1</version>
4
<configuration>
5
<dest>target/classes</dest>
6
<src>src/main/resources</src>
7
<encoding>UTF-8</encoding>
8
</configuration> 再运行“mvn native2ascii:native2ascii”,发现encoding有值了,但是生成的文件编码还是GB18030,不过运行服务,中文乱码没有了。看来和文件编码没有太大关系,应该是native2ascii转换时采用默认的GB18030编码转换导致的。
另外pom.xml只配置了ApplicationResources_zh*.properties的字符转换,AppFuse还有displaytag_zh.properties也需要转换,我们可以把pom.xml里ApplicationResources_zh*.properties都换成*_zh*.properties就可以了。
1
<configuration>
2
<encoding>UTF8</encoding>
3
<includes>
4
ApplicationResources_ko.properties,
5
ApplicationResources_no.properties,
6
ApplicationResources_tr.properties,
7
*_zh*.properties
8
</includes>
9
</configuration>
10
11


12
13
<resource>
14
<directory>src/main/resources</directory>
15
<excludes>
16
<exclude>ApplicationResources_de.properties</exclude>
17
<exclude>ApplicationResources_fr.properties</exclude>
18
<exclude>ApplicationResources_ko.properties</exclude>
19
<exclude>ApplicationResources_nl.properties</exclude>
20
<exclude>ApplicationResources_no.properties</exclude>
21
<exclude>ApplicationResources_pt*.properties</exclude>
22
<exclude>ApplicationResources_tr.properties</exclude>
23
<exclude>*_zh*.properties</exclude>
24
<exclude>applicationContext-resources.xml</exclude>
25
<exclude>struts.xml</exclude>
26
</excludes>
27
<filtering>true</filtering>
28
</resource> 文章来源:
http://heyday.blogcn.com/diary,15137426.shtml