diff --git a/pre_commit_hooks/debug_statement_hook.py b/pre_commit_hooks/debug_statement_hook.py index d76e6e6..c5ca387 100644 --- a/pre_commit_hooks/debug_statement_hook.py +++ b/pre_commit_hooks/debug_statement_hook.py @@ -35,7 +35,7 @@ class ImportStatementParser(ast.NodeVisitor): def check_file_for_debug_statements(filename): try: - ast_obj = ast.parse(open(filename).read(), filename=filename) + ast_obj = ast.parse(open(filename, 'rb').read(), filename=filename) except SyntaxError: print('{} - Could not parse ast'.format(filename)) print() diff --git a/tests/debug_statement_hook_test.py b/tests/debug_statement_hook_test.py index 6d8d7d8..8832245 100644 --- a/tests/debug_statement_hook_test.py +++ b/tests/debug_statement_hook_test.py @@ -1,3 +1,7 @@ +# -*- coding: utf-8 -*- +from __future__ import absolute_import +from __future__ import unicode_literals + import ast import pytest @@ -77,3 +81,9 @@ def test_returns_zero_for_passing_file(): def test_syntaxerror_file(): ret = debug_statement_hook([get_resource_path('cannot_parse_ast.notpy')]) assert ret == 1 + + +def test_non_utf8_file(tmpdir): + f_py = tmpdir.join('f.py') + f_py.write_binary('# -*- coding: cp1252 -*-\nx = "€"\n'.encode('cp1252')) + assert debug_statement_hook((f_py.strpath,)) == 0