BUG: pytest giving UnicodeDecodeError on Windows machine

### Describe the bug

When running the test suite on my Windows machine, I get the following error:
```
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb8 in position 4836: illegal multibyte sequence
```

https://github.com/scikit-learn/scikit-learn/blob/361b09ee0b4da323e3314ad0fdb651e0d529918e/sklearn/utils/_estimator_html_repr.py#L312-L314

These lines are causing the error. Simply specifying `encoding="utf-8"` upon `open` solves my issue. Not sure if maintainers would accept this change. If so, I can make a simple one-line PR. Otherwise is there any suggested workaround for me? It is kinda annoying to add this keyword every time I run a test suite then remove when commit.

### Steps/Code to Reproduce

```
pytest ./
```

### Expected Results

Correctly runs the test suite.

### Actual Results

```
Traceback (most recent call last):
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\runpy.py", line 197, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "D:\Downloads\mambaforge\envs\sklearn-env\Scripts\pytest.exe\__main__.py", line 7, in <module>
    sys.exit(console_main())
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 192, in console_main
    code = main()
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 150, in main
    config = _prepareconfig(args, plugins)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 331, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\pluggy\_hooks.py", line 493, in __call__
    return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\pluggy\_manager.py", line 115, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\pluggy\_callers.py", line 130, in _multicall
    teardown[0].send(outcome)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\helpconfig.py", line 104, in pytest_cmdline_parse
    config: Config = outcome.get_result()
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\pluggy\_result.py", line 114, in get_result
    raise exc.with_traceback(exc.__traceback__)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\pluggy\_callers.py", line 77, in _multicall
    res = hook_impl.function(*args)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 1075, in pytest_cmdline_parse
    self.parse(args)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 1425, in parse
    self._preparse(args, addopts=addopts)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 1301, in _preparse
    self.pluginmanager.consider_preparse(args, exclude_only=False)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 709, in consider_preparse
    self.consider_pluginarg(parg)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 735, in consider_pluginarg
    self.import_plugin(arg, consider_entry_points=True)
  File "D:\Downloads\mambaforge\envs\sklearn-env\lib\site-packages\_pytest\config\__init__.py", line 781, in import_plugin
    __import__(importspec)
  File "d:\ossd\scikit-learn-yxiao\sklearn\__init__.py", line 87, in <module>
    from .base import clone
  File "d:\ossd\scikit-learn-yxiao\sklearn\base.py", line 19, in <module>
    from .utils import _IS_32BIT
  File "d:\ossd\scikit-learn-yxiao\sklearn\utils\__init__.py", line 21, in <module>
    from ._estimator_html_repr import estimator_html_repr
  File "d:\ossd\scikit-learn-yxiao\sklearn\utils\_estimator_html_repr.py", line 314, in <module>
    _STYLE = style_file.read()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xb8 in position 4836: illegal multibyte sequence
```

### Versions

```shell
System:
    python: 3.9.18 | packaged by conda-forge | (main, Aug 30 2023, 03:40:31) [MSC v.1929 64 bit (AMD64)]
executable: D:\Downloads\mambaforge\envs\sklearn-env\python.exe
   machine: Windows-10-10.0.19045-SP0

Python dependencies:
      sklearn: 1.4.dev0
          pip: 23.2.1
   setuptools: 68.2.2
        numpy: 1.26.0
        scipy: 1.11.2
       Cython: 3.0.2
       pandas: 2.1.1
   matplotlib: 3.8.0
       joblib: 1.3.2
threadpoolctl: 3.2.0

Built with OpenMP: True

threadpoolctl info:
       user_api: blas
   internal_api: mkl
    num_threads: 6
         prefix: libblas
       filepath: D:\Downloads\mambaforge\envs\sklearn-env\Library\bin\libblas.dll
        version: 2022.1-Product
threading_layer: intel

       user_api: openmp
   internal_api: openmp
    num_threads: 12
         prefix: vcomp
       filepath: D:\Downloads\mambaforge\envs\sklearn-env\vcomp140.dll
        version: None
```

COMMENT:
I open #27731 to enforce the codec. @Charlie-XIAO feel free to give a try to this PR to know if this is solving the issue.

Labels: Bug, Blocker