diff --git a/release/scripts/modules/addon_utils.py b/release/scripts/modules/addon_utils.py index 22936f4c209..0c5ef69e805 100644 --- a/release/scripts/modules/addon_utils.py +++ b/release/scripts/modules/addon_utils.py @@ -32,6 +32,7 @@ import bpy as _bpy error_duplicates = False +error_encoding = False def paths(): @@ -51,14 +52,18 @@ def paths(): def modules(module_cache): global error_duplicates + global error_encoding import os error_duplicates = False + error_encoding = False path_list = paths() # fake module importing def fake_module(mod_name, mod_path, speedy=True): + global error_encoding + if _bpy.app.debug: print("fake_module", mod_path, mod_name) import ast @@ -69,12 +74,28 @@ def modules(module_cache): line_iter = iter(file_mod) l = "" while not l.startswith("bl_info"): - l = line_iter.readline() + try: + l = line_iter.readline() + except UnicodeDecodeError as e: + if not error_encoding: + error_encoding = True + print("Error reading file as UTF-8:", mod_path, e) + file_mod.close() + return None + if len(l) == 0: break while l.rstrip(): lines.append(l) - l = line_iter.readline() + try: + l = line_iter.readline() + except UnicodeDecodeError as e: + if not error_encoding: + error_encoding = True + print("Error reading file as UTF-8:", mod_path, e) + file_mod.close() + return None + data = "".join(lines) else: diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py index e27bd8ef07a..e6fd8dcb949 100644 --- a/release/scripts/startup/bl_ui/space_userpref.py +++ b/release/scripts/startup/bl_ui/space_userpref.py @@ -949,6 +949,12 @@ class USERPREF_PT_addons(bpy.types.Panel): "(see console for details)", ) + if addon_utils.error_encoding: + self.draw_error(col, + "One or more addons do not have UTF-8 encoding\n" + "(see console for details)", + ) + filter = context.window_manager.addon_filter search = context.window_manager.addon_search.lower() support = context.window_manager.addon_support