diff options
author | Paulo Casanova <pasc@google.com> | 2017-05-08 13:42:16 +0100 |
---|---|---|
committer | Paulo Casanova <pasc@google.com> | 2017-05-08 13:43:19 +0100 |
commit | 6fb3edd101b373e026ef3e8bcae35e8dd111dd7f (patch) | |
tree | 41df20dbd9c57d156bef905771ac86268ede1487 /src/test | |
parent | 4a3db1dabcf1c7ad66b186059a8493cc69e7ca67 (diff) | |
download | apkzlib-6fb3edd101b373e026ef3e8bcae35e8dd111dd7f.tar.gz |
Updated ZFile to use UTF-8 if needed.
If ASCII decoding fails, ZFile will now automatically try
UTF-8.
Change-Id: I29ef2cf3c043cf31d6c07c70271297356d2571f2
Test: Included
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/java/com/android/apkzlib/zip/EncodeUtilsTest.java | 13 | ||||
-rw-r--r-- | src/test/java/com/android/apkzlib/zip/ZFileTest.java | 25 |
2 files changed, 38 insertions, 0 deletions
diff --git a/src/test/java/com/android/apkzlib/zip/EncodeUtilsTest.java b/src/test/java/com/android/apkzlib/zip/EncodeUtilsTest.java index 0eaf1cb..8648aa0 100644 --- a/src/test/java/com/android/apkzlib/zip/EncodeUtilsTest.java +++ b/src/test/java/com/android/apkzlib/zip/EncodeUtilsTest.java @@ -56,4 +56,17 @@ public class EncodeUtilsTest { (byte) 0xd0, (byte) 0xb0 }, encoded); assertEquals(kazakhCapital, EncodeUtils.decode(encoded, flags)); } + + @Test + public void asciiDecodeAsUtf8() { + byte[] greatWallChinese = + new byte[] { + (byte) 0xe9, (byte) 0x95, (byte) 0xB7, (byte) 0xe5, (byte) 0x9F, (byte) 0x8E + }; + + GPFlags flags = GPFlags.make(false); + + String text = EncodeUtils.decode(greatWallChinese, flags); + assertEquals("\u9577\u57ce", text); + } } diff --git a/src/test/java/com/android/apkzlib/zip/ZFileTest.java b/src/test/java/com/android/apkzlib/zip/ZFileTest.java index 7497412..f6062e7 100644 --- a/src/test/java/com/android/apkzlib/zip/ZFileTest.java +++ b/src/test/java/com/android/apkzlib/zip/ZFileTest.java @@ -951,6 +951,31 @@ public class ZFileTest { filetMignonKorean + " " + isGoodJapanese, entry.getCentralDirectoryHeader().getName()); assertArrayEquals( + "Stuff about food is good.\n".getBytes(Charsets.US_ASCII), entry.read()); + } + } + + @Test + public void utf8NamesSupportedOnReadingWithoutUtf8Flag() throws Exception { + File zip = ZipTestUtils.cloneRsrc("zip-with-utf8-filename.zip", mTemporaryFolder); + + // Reset bytes 7 and 122 that have the flag in the local header and central directory. + byte[] data = Files.toByteArray(zip); + data[7] = 0; + data[122] = 0; + Files.write(data, zip); + + try (ZFile f = new ZFile(zip)) { + assertEquals(1, f.entries().size()); + + StoredEntry entry = f.entries().iterator().next(); + String filetMignonKorean = "\uc548\uc2eC \uc694\ub9ac"; + String isGoodJapanese = "\u3068\u3066\u3082\u826f\u3044"; + + assertEquals( + filetMignonKorean + " " + isGoodJapanese, + entry.getCentralDirectoryHeader().getName()); + assertArrayEquals( "Stuff about food is good.\n".getBytes(Charsets.US_ASCII), entry.read()); } |