diff --git a/epub4j-core/src/main/java/io/documentnode/epub4j/epub/PackageDocumentReader.java b/epub4j-core/src/main/java/io/documentnode/epub4j/epub/PackageDocumentReader.java index 31a251f..304a9a0 100644 --- a/epub4j-core/src/main/java/io/documentnode/epub4j/epub/PackageDocumentReader.java +++ b/epub4j-core/src/main/java/io/documentnode/epub4j/epub/PackageDocumentReader.java @@ -369,6 +369,11 @@ static Set findCoverHrefs(Document packageDocument) { OPFTags.item, OPFAttributes.id, coverResourceId, OPFAttributes.href); if (StringUtil.isNotBlank(coverHref)) { + try { + coverHref = URLDecoder.decode(coverHref, Constants.CHARACTER_ENCODING); + } catch (UnsupportedEncodingException e) { + log.error(e.getMessage()); + } result.add(coverHref); } else { result.add( @@ -381,6 +386,11 @@ static Set findCoverHrefs(Document packageDocument) { OPFTags.reference, OPFAttributes.type, OPFValues.reference_cover, OPFAttributes.href); if (StringUtil.isNotBlank(coverHref)) { + try { + coverHref = URLDecoder.decode(coverHref, Constants.CHARACTER_ENCODING); + } catch (UnsupportedEncodingException e) { + log.error(e.getMessage()); + } result.add(coverHref); } return result; diff --git a/epub4j-core/src/test/java/io/documentnode/epub4j/epub/PackageDocumentReaderTest.java b/epub4j-core/src/test/java/io/documentnode/epub4j/epub/PackageDocumentReaderTest.java index 105af12..851aed5 100644 --- a/epub4j-core/src/test/java/io/documentnode/epub4j/epub/PackageDocumentReaderTest.java +++ b/epub4j-core/src/test/java/io/documentnode/epub4j/epub/PackageDocumentReaderTest.java @@ -8,6 +8,8 @@ import java.io.IOException; import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; import org.junit.Assert; import org.junit.Test; @@ -28,7 +30,17 @@ public void testFindCoverHref_content1() throws SAXException, IOException { assertEquals(1, coverHrefs.size()); assertEquals("cover.html", coverHrefs.iterator().next()); } - + + @Test + public void testFindCoverHref_URLEncoded() throws SAXException, IOException { + Set expected = new HashSet<>(Arrays.asList("cover+.png", "cover+.html")); + Document packageDocument; + packageDocument = EpubProcessorSupport.createDocumentBuilder().parse(PackageDocumentReaderTest.class.getResourceAsStream("/opf/test_urlencoded_href.opf")); + Collection coverHrefs = PackageDocumentReader.findCoverHrefs(packageDocument); + assertEquals(2, coverHrefs.size()); + assertEquals(expected, coverHrefs); + } + @Test public void testFindTableOfContentsResource_simple_correct_toc_id() { // given diff --git a/epub4j-core/src/test/resources/opf/test_urlencoded_href.opf b/epub4j-core/src/test/resources/opf/test_urlencoded_href.opf new file mode 100644 index 0000000..8101d2d --- /dev/null +++ b/epub4j-core/src/test/resources/opf/test_urlencoded_href.opf @@ -0,0 +1,32 @@ + + + + EPUB4J test book 1 + Joe Tester + 2010-05-27 + en + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file