diff --git a/src/python/pants/reporting/html_reporter.py b/src/python/pants/reporting/html_reporter.py
index bc1c480fd76..3d7b8846137 100644
--- a/src/python/pants/reporting/html_reporter.py
+++ b/src/python/pants/reporting/html_reporter.py
@@ -454,7 +454,7 @@ def _overwrite(self, filename, func, force=False):
def _htmlify_text(self, s):
"""Make text HTML-friendly."""
- colored = self._handle_ansi_color_codes(cgi.escape(s.decode('utf-8')))
+ colored = self._handle_ansi_color_codes(cgi.escape(s.decode('utf-8', 'replace')))
return linkify(self._buildroot, colored, self._linkify_memo).replace('\n', '')
_ANSI_COLOR_CODE_RE = re.compile(r'\033\[((?:\d|;)*)m')
diff --git a/tests/python/pants_test/engine/exp/test_engine.py b/tests/python/pants_test/engine/exp/test_engine.py
index 2d211ecbfef..1bed3e2b0df 100644
--- a/tests/python/pants_test/engine/exp/test_engine.py
+++ b/tests/python/pants_test/engine/exp/test_engine.py
@@ -61,6 +61,7 @@ def test_multiprocess_unpickleable(self):
with self.assertRaises(SerializationError):
engine.execute(build_request)
+ @unittest.skip('https://github.com/pantsbuild/pants/issues/3149')
def test_rerun_with_cache(self):
with self.multiprocessing_engine() as engine:
self.assert_engine(engine)