Я преобразовываю проект из Ant в Maven, и у меня возникают проблемы с конкретным unit test, который имеет дело с символами UTF-8. Проблема заключается в следующей строчке:
String l_string = "ČäÁÓý\n€řЖжЦ\n№ЯФКЛ";
Проблема в том, что unit test завершается с ошибкой, потому что строка читается следующим образом:
?äÁÓý
€????
?????
Класс java сохраняется как UTF-8, и я также указываю кодировку сборки UTF-8 в pom.xml.
Вот выдержка из моего 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 );
}
Следующая логика не актуальна (?), потому что после первого sysout ранее упомянутого "?" вместо правильных символов (и, следовательно, следующие тесты не работают). Также не используется кодировка платформы по умолчанию.
Тест преобразует каждый символ в соответствии с файлом TransformationMap.properties, который находится в следующем виде (только выдержка):
Ý=Y
ý=y
Ž=Z
ž=z
°=.
€=EUR
Следует отметить, что тест выполняется без каких-либо проблем при создании проекта с помощью Ant.