cz-cli icon indicating copy to clipboard operation
cz-cli copied to clipboard

fix: UnicodeDecodeError when running 'cz init' on Windows with non-English locale

Open Haskely opened this issue 10 months ago • 0 comments

Description

When running cz init on Windows, the command fails with a UnicodeDecodeError due to the default file encoding being 'gbk' instead of 'utf-8'.

Steps to Reproduce

  1. Create a new Python project on Windows with Chinese system locale
  2. Install commitizen
  3. Run cz init
  4. Select pyproject.toml as config file
  5. Select commit rule

Error Message

UnicodeDecodeError: 'gbk' codec can't decode byte 0xaf in position 52: illegal multibyte sequence

Technical Details

The error occurs in commitizen/commands/init.py when checking for poetry configuration:

    @property
    def is_python_poetry(self) -> bool:
        if not self.has_pyproject:
            return False
        with open("pyproject.toml") as f:
            return "[tool.poetry]" in f.read())  # Here the file is opened without specifying encoding

Expected Behavior

The file should be opened with UTF-8 encoding explicitly to ensure consistent behavior across different system locales.

Suggested Fix

# In commitizen/commands/init.py
    @property
    def is_python_poetry(self) -> bool:
        if not self.has_pyproject:
            return False
        with open("pyproject.toml", encoding=self.settings["encoding"]) as f: # self.settings["encoding"] default is utf-8
            return "[tool.poetry]" in f.read())

Environment

  • OS: Windows
  • Python Version: 3.12
  • Commitizen Version: latest
  • System Locale: Chinese (Simplified)

ScreenShot

Image

Haskely avatar Jan 20 '25 11:01 Haskely