Browse Source

BUG 60273 -- Use codepageutil to get correct charset in VBAMacroReader

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1765490 13f79535-47bb-0310-9956-ffa450edef68
tags/REL_3_16_BETA1
Tim Allison 7 years ago
parent
commit
8e3a70d4b1

+ 2
- 1
src/java/org/apache/poi/poifs/macros/VBAMacroReader.java View File

@@ -41,6 +41,7 @@ import org.apache.poi.poifs.filesystem.DocumentNode;
import org.apache.poi.poifs.filesystem.Entry;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.poifs.filesystem.OfficeXmlFileException;
import org.apache.poi.util.CodePageUtil;
import org.apache.poi.util.HexDump;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.RLEDecompressingInputStream;
@@ -305,7 +306,7 @@ public class VBAMacroReader implements Closeable {
break;
case PROJECTCODEPAGE:
int codepage = in.readShort();
modules.charset = Charset.forName("Cp" + codepage);
modules.charset = Charset.forName(CodePageUtil.codepageToEncoding(codepage, true));
break;
case STREAMNAME:
streamName = readString(in, recordLength, modules.charset);

+ 10
- 0
src/testcases/org/apache/poi/poifs/macros/TestVBAMacroReader.java View File

@@ -272,4 +272,14 @@ public class TestVBAMacroReader {
assertNotNull(macros.get("NewMacros"));
assertContains(macros.get("NewMacros"), "' dirty");
}

@Test
public void bug60273() throws IOException {
//test file derives from govdocs1 147240.xls
File f = POIDataSamples.getSpreadSheetInstance().getFile("60273.xls");
VBAMacroReader r = new VBAMacroReader(f);
Map<String, String> macros = r.readMacros();
assertNotNull(macros.get("Module1"));
assertContains(macros.get("Module1"), "9/8/2004");
}
}

BIN
test-data/spreadsheet/60273.xls View File


Loading…
Cancel
Save