Maven:UTF-8 中的源编码不起作用?
我正在将一个项目从Ant转换为Maven,我在处理UTF-8字符的特定单元测试中遇到了问题。问题与以下字符串有关:
String l_string = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ";
问题是单元测试失败,因为字符串被读取如下:
?äÁÓý
€????
?????
java类被保存为UTF-8,我还在pom.xml中指定了UTF-8的构建编码。
以下是我的pom.xml摘录:
...
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
...
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.15</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.15</version>
</plugin>
</plugins>
</build>
我在这里错过了什么吗?如果有人能在这里帮助我,那就太好了。
更新
关于测试代码:
@Test
public void testTransformation()
{
String l_string = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ";
System.out.println( ">>> " + l_string );
c_log.info( l_string );
StringBuffer l_stringBuffer = new StringBuffer();
int l_stringLength = l_string.length();
String l_fileName = System.getProperty( "user.dir" ) + File.separator + "transformation" + File.separator + "TransformationMap.properties";
Transformation.init( l_fileName );
Properties l_props = Transformation.getProps();
for ( int i = 0; i < l_stringLength; i++ )
{
char l_char = l_string.charAt( i );
int l_intValue = (int) l_char;
if ( l_intValue <= 255 )
{
l_stringBuffer.append( l_char );
}
else
{
l_stringBuffer.append( l_props.getProperty( String.valueOf( l_char ), "" ) );
}
}
c_log.info( l_stringBuffer.toString() );
byte[] l_bytes = l_string.getBytes();
byte[] l_transformedBytes = Transformation.transform( l_bytes );
assertNotNull( l_transformedBytes );
}
以下逻辑并不真正相关(?),因为在第一个系统之后,前面提到的“?”被打印出来而不是正确的字符(因此下面的测试失败)。也没有使用默认平台编码。
该测试根据TransformationMap.properties文件转换每个字符,该文件采用以下形式(只是摘录):
Ý=Y
ý=y
Ž=Z
ž=z
°=.
€=EUR
应该注意的是,当我使用Ant构建项目时,测试运行没有任何问题。