Maven: ¿La codificación fuente en UTF-8 no funciona?
Estoy convirtiendo un proyecto de Ant a Maven y estoy teniendo problemas con una prueba de unidad específica que trata con caracteres UTF-8. El problema es sobre la siguiente cadena:
String l_string = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ";
El problema es que la prueba de la unidad falla, porque la cadena se lee como la siguiente:
?äÁÓý
€????
?????
La clase java se guarda como UTF-8 y también especifico la codificación de compilación a UTF-8 en el pom.xml.
Aquí está un extracto de mipom.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>
¿Me estoy perdiendo de algo? Sería genial, si alguien pudiera ayudarme aquí.
Actualizar
Respecto al código de prueba:
@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 );
}
La siguiente lógica no es realmente relevante (?) Porque después del primer sysout el "?" se imprimen en lugar de los caracteres correctos (y, por lo tanto, las siguientes pruebas fallan). Tampoco se utiliza una codificación de plataforma predeterminada.
La prueba convierte cada carácter de acuerdo con el archivo TransformationMap.properties, que se encuentra en la siguiente forma (solo un extracto):
Ý=Y
ý=y
Ž=Z
ž=z
°=.
€=EUR
Cabe señalar que la prueba se ejecuta sin ningún problema cuando compilo el proyecto con Ant.