Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Maven: Source Encoding in UTF-8 not working?

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 = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ"; 

The problem is that the unit test fails, because the String is read as the following:

?äÁÓý €???? ????? 

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 = "ČäÁÓý\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 );  } 

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 Ž=Z ž=z °=. €=EUR 

It should be noted that the test runs without any problem when i build the project with Ant.

like image 581
softandsafe Avatar asked Jul 15 '13 14:07

softandsafe


People also ask

What is Maven war plugin?

The WAR Plugin is responsible for collecting all artifact dependencies, classes and resources of the web application and packaging them into a web application archive.

What is org Apache Maven plugins?

org.apache.maven.plugins » maven-javadoc-pluginApache. The Apache Maven Javadoc Plugin is a plugin that uses the javadoc tool for generating javadocs for the specified project. Last Release on Aug 13, 2022.


1 Answers

I have found a "solution" myself:

I had to pass the encoding into the maven-surefire-plugin, but the usual

<encoding>${project.build.sourceEncoding}</encoding> 

did not work. I still have no idea why, but when i pass the command line arguments into the plugin, the tests works as they should:

<plugin>       <groupId>org.apache.maven.plugins</groupId>       <artifactId>maven-surefire-plugin</artifactId>       <version>2.15</version>       <configuration>         <argLine>-Dfile.encoding=UTF-8</argLine>       </configuration> </plugin> 

Thanks for all your responses and additional comments!

like image 163
softandsafe Avatar answered Oct 11 '22 12:10

softandsafe