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