i am converting a project from Ant to Maven and i'm having problems with a specific unit test which deals with UTF-8 characters. The problem is about the following String:
String l_string = "??áóy
€?ЖжЦ
№ЯФКЛ";
The problem is that the unit test fails, because the String is read as the following:
??áóy
€????
?????
The java class is saved as UTF-8 and i also specify the build encoding to UTF-8 in the pom.xml.
Here is an excerpt of my 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>
Am i missing something here? It would be great, if someone could help me here.
Update
Regarding the test code:
@Test
public void testTransformation()
{
String l_string = "??áóy
€?ЖжЦ
№ЯФКЛ";
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 );
}
The following logic isn't really relevant(?) because after the first sysout the before mentioned "?" are printed instead of the correct characters (and therefore the following tests fail). There is also no use of a default platform encoding.
The test converts each character according to the TransformationMap.properties file, which is in the following form (just an excerpt):
Y=Y
y=y
?=Z
?=z
°=.
€=EUR
It should be noted that the test runs without any problem when i build the project with Ant.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…