Maven: Quellcodierung in UTF-8 funktioniert nicht?
Ich konvertiere ein Projekt von Ant nach Maven und habe Probleme mit einem bestimmten Komponententest, der sich mit UTF-8-Zeichen befasst. Das Problem betrifft die folgende Zeichenfolge:
String l_string = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ";
Das Problem ist, dass der Komponententest fehlschlägt, da die Zeichenfolge wie folgt gelesen wird:
?äÁÓý
€????
?????
Die Java-Klasse wird als UTF-8 gespeichert und ich gebe auch die Build-Codierung für UTF-8 in der pom.xml an.
Hier ist ein Auszug von mirpom.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>
Vermisse ich hier etwas? Es wäre toll, wenn mir hier jemand helfen könnte.
Aktualisieren
In Bezug auf den Testcode:
@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 );
}
Die folgende Logik ist nicht wirklich relevant (?), Da nach dem ersten Sysout das zuvor erwähnte "?" werden anstelle der richtigen Zeichen gedruckt (und daher schlagen die folgenden Tests fehl). Es wird auch keine Standard-Plattformcodierung verwendet.
Der Test konvertiert jedes Zeichen gemäß der Datei TransformationMap.properties, die die folgende Form hat (nur ein Auszug):
Ý=Y
ý=y
Ž=Z
ž=z
°=.
€=EUR
Es sollte beachtet werden, dass der Test ohne Probleme läuft, wenn ich das Projekt mit Ant erstelle.