diff --git a/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java b/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java index ff61b2d85b9..450d0e79359 100644 --- a/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java +++ b/powerfactory/powerfactory-dgs/src/main/java/com/powsybl/powerfactory/dgs/DgsParser.java @@ -12,16 +12,14 @@ import com.powsybl.commons.PowsyblException; import com.powsybl.powerfactory.model.DataAttributeType; import com.powsybl.powerfactory.model.PowerFactoryException; +import org.apache.commons.io.input.BOMInputStream; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.math3.linear.BlockRealMatrix; import org.apache.commons.math3.linear.RealMatrix; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.Reader; -import java.io.UncheckedIOException; +import java.io.*; import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -243,7 +241,7 @@ private static void readObjectTableRow(String trimmedLine, DgsHandler handler, P public void read(Reader reader, DgsHandler handler) { Objects.requireNonNull(reader); Objects.requireNonNull(handler); - try (BufferedReader bufferedReader = new BufferedReader(reader)) { + try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(BOMInputStream.builder().setReader(reader).get()))) { String line; ParsingContext context = new ParsingContext(); while ((line = bufferedReader.readLine()) != null) { diff --git a/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java b/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java index 6915deafbdf..f0a163d866a 100644 --- a/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java +++ b/powerfactory/powerfactory-dgs/src/test/java/com/powsybl/powerfactory/dgs/DgsDataTest.java @@ -89,6 +89,11 @@ void missingElementInLineTest() { assertEquals("Not enough fields in the line: '1;Version'", exception.getMessage()); } + @Test + void bomTest() { + assertDoesNotThrow(() -> loadCase("/BOMTest.dgs")); + } + private boolean test(String dgs, String json) throws IOException { StudyCase studyCase = loadCase(dgs); String expectedJson = loadReference(json); diff --git a/powerfactory/powerfactory-dgs/src/test/resources/BOMTest.dgs b/powerfactory/powerfactory-dgs/src/test/resources/BOMTest.dgs new file mode 100644 index 00000000000..4a0d72fabb3 --- /dev/null +++ b/powerfactory/powerfactory-dgs/src/test/resources/BOMTest.dgs @@ -0,0 +1,2 @@ +$$General;ID(a:40);Descr(a:40);Val(a:40) + 1;Version;5.0