Я только что столкнулся с очень странной проблемой с getResourceAsStream().
В моем тестовом проекте JUnit я прочитал тестовые данные, используя getResourceAsStream(), и обнаружил, что getResourceAsStream() иногда заменяет некоторые байты:
byte[] fileBytes = FileUtils.readFileToByteArray(new File(
"resources/test/parser/test-short-enc.xml"));
printBytes(fileBytes);
byte[] classPathBytes = IOUtils.toByteArray(ParserTest.class
.getResourceAsStream("/test/parser/test-short-enc.xml"))
printBytes(classPathBytes);
В этом проекте вывод выглядит следующим образом:
D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 81 D1 82 D0 B8 D0 BA D0 B0
D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 3F D1 82 D0 B8 D0 BA D0 B0
После этого я решил создать небольшой проект по выявлению ошибок и разместить его на Github в качестве примера. Вот ссылка: https://github.com/snowindy/getResourceAsStream-Bug
По сути, я скопировал необходимый код, после запуска я не увидел проблемы с воспроизведением:
D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 81 D1 82 D0 B8 D0 BA D0 B0
D0 9A D1 80 D0 B8 D0 BC D0 B8 D0 BD D0 B0 D0 BB D0 B8 D1 81 D1 82 D0 B8 D0 BA D0 B0
Функция printBytes выглядит так:
public static void printBytes(byte[] bv) {
System.out.println();
for (byte b : bv) {
System.out.print(' ');
System.out.print(String.format("%02X", b));
}
}
Что это может быть?
Я использую eclipse, кодировка рабочей области UTF-8, файл содержит кириллицу "Криминалистика", это файл UTF-8 no-BOM.
Я использую JavaSE-1.6 (jdk1.6.0_29) для обоих проектов, у меня ОС Windows 7, системная кодировка windows-1252.
ОБНОВЛЕНИЕ
Наконец-то я смог воспроизвести ошибку. Я обновил проект, чтобы вы могли его протестировать: https://github.com/snowindy/getResourceAsStream-Bug а>
Ошибка появляется, только если у вас есть этот код в maven pom.xml. Это означает, что он специфичен для maven
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>resources</directory>
<filtering>true</filtering>
</resource>
</resources>
...
test-short-enc.xml
в вашей локальной системе? - person Jim Garrison   schedule 03.02.2013