From c5dce21648709758058f011c5691537b9dcfe191 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nikola=20Forr=C3=B3?= Date: Sun, 11 Jun 2023 13:57:49 +0200 Subject: [PATCH] Be explicit about encoding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Default encoding is not always UTF-8, make it explicit. Also use the surrogateescape error handler to preserve undecodable bytes. Signed-off-by: Nikola Forró --- specfile/specfile.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/specfile/specfile.py b/specfile/specfile.py index b4a8bb9..400b4bb 100644 --- a/specfile/specfile.py +++ b/specfile/specfile.py @@ -64,7 +64,7 @@ def __init__( """ self.autosave = autosave self._path = Path(path) - self._lines = self.path.read_text().splitlines() + self._lines = self._read_lines(self._path) self._parser = SpecParser( Path(sourcedir or self.path.parent), macros, force_parse ) @@ -101,6 +101,10 @@ def __exit__( ) -> None: self.save() + @staticmethod + def _read_lines(path: Path) -> List[str]: + return path.read_text(encoding="utf8", errors="surrogateescape").splitlines() + @property def path(self) -> Path: """Path to the spec file.""" @@ -154,11 +158,11 @@ def rpm_spec(self) -> rpm.spec: def reload(self) -> None: """Reload the spec file content.""" - self._lines = self.path.read_text().splitlines() + self._lines = self._read_lines(self.path) def save(self) -> None: """Save the spec file content.""" - self.path.write_text(str(self)) + self.path.write_text(str(self), encoding="utf8", errors="surrogateescape") def expand( self,