diff --git a/py/apigen/source/html.py b/py/apigen/source/html.py
index 6fd39b16f..dbcd7cbc6 100644
--- a/py/apigen/source/html.py
+++ b/py/apigen/source/html.py
@@ -261,8 +261,15 @@ def get_module_encoding(path):
if path[-1] in ['c', 'o']:
path = path[:-1]
fpath = py.path.local(path)
- code = fpath.read()
- match = _reg_enc.search(code)
+ fp = fpath.open()
+ lines = []
+ try:
+ # encoding is only allowed in the first two lines
+ for i in range(2):
+ lines.append(fp.readline())
+ finally:
+ fp.close()
+ match = _reg_enc.search('\n'.join(lines))
if match:
return match.group(1)
return 'ISO-8859-1'
diff --git a/py/apigen/source/testing/test_html.py b/py/apigen/source/testing/test_html.py
index 1e62ef8fe..526cdcb07 100644
--- a/py/apigen/source/testing/test_html.py
+++ b/py/apigen/source/testing/test_html.py
@@ -177,3 +177,14 @@ def test_get_encoding_for_real():
""")))
assert get_module_encoding(fpath.strpath) == 'UTF-8'
+def test_get_encoding_matching_pattern_elsewhere():
+ temp = py.test.ensuretemp('test_get_encoding')
+ fpath = temp.join('matching_pattern.py')
+ fpath.write(str(py.code.Source("""\
+ #!/usr/bin/env python
+
+ def foo(coding=None):
+ pass
+ """)))
+ assert get_module_encoding(fpath.strpath) == 'ISO-8859-1'
+