Repository navigation
commitizen_emoji cannot write to CHANGELOG #516
Copy link
Copy link
Closed
Labels
issue-status: wait-for-implementationmaintainers agree on the bug / featuremaintainers agree on the bug / featureos: Windowstype: bug
Description
Description
This is because commitizen_emoji uses unicode emoji characters, but commitizen does not specify the file encoding in write_changelog(), so it defaults back to cp1252:
| with open(self.file_name, "w") as changelog_file: |
This could be fixed by specifying the utf-8 encoding:
with open(self.file_name, "w", encoding='utf-8') as changelog_file:
...Steps to reproduce
> cz bump --changelog
bump: version 0.4.0 → 0.5.0
tag to create: 0.5.0
increment detected: MINOR
Traceback (most recent call last):
File "C:\Program Files\Python38\lib\runpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:\Program Files\Python38\lib\runpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:\Users\hendra11\Code\external\cz-emoji\.venv\Scripts\cz.exe\__main__.py", line 7, in <module>
File "C:\Users\hendra11\Code\external\cz-emoji\.venv\lib\site-packages\commitizen\cli.py", line 382, in main
args.func(conf, vars(args))()
File "C:\Users\hendra11\Code\external\cz-emoji\.venv\lib\site-packages\commitizen\commands\bump.py", line 215, in __call__
changelog_cmd()
File "C:\Users\hendra11\Code\external\cz-emoji\.venv\lib\site-packages\commitizen\commands\changelog.py", line 172, in __call__
self.write_changelog(changelog_out, lines, changelog_meta)
File "C:\Users\hendra11\Code\external\cz-emoji\.venv\lib\site-packages\commitizen\commands\changelog.py", line 103, in write_changelog
changelog_file.write(changelog_out)
File "C:\Program Files\Python38\lib\encodings\cp1252.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\U0001f389' in position 29: character maps to <undefined>
Current behavior
See Steps to reproduce
Desired behavior
Emojis can be logged to changelog
Screenshots
No response
Environment
- cz version: 2.27.0
- python version: 3.8.13
- platform.system(): 'Windows'
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
issue-status: wait-for-implementationmaintainers agree on the bug / featuremaintainers agree on the bug / featureos: Windowstype: bug
Activity
Lee-W commentedon May 22, 2022
Maybe we could make the encoding configurable?
adam-grant-hendry commentedon May 22, 2022
'utf-8' should cover all encodings, but I'm fine with that. You'd have to change
BaseCommitizento grab that config variable and everywhere you have anopenused in your codebase, change it to add the encoding.fabiopedrosa commentedon Jul 28, 2022
I seen the same issue on my end, and adding the
encoding='utf-8'fixed it.Lee-W commentedon Aug 14, 2022
Hi @adam-grant-hendry we've release a new version of commitizen. Could you please try whether 2.30.0 solve this issue?
Yusin0903 commentedon Aug 14, 2022
After I test it, the problem still exists.
adam-grant-hendry commentedon Oct 14, 2022
@Lee-W The problem still persists. I tried on
2.35.0.You need to specify the
utf-8encoding whereopen()is used. That is how this can be fixed and it was additionally confirmed by @fabiopedrosaadam-grant-hendry commentedon Oct 14, 2022
@Lee-W I remember now why I never submitted a PR: I am on Windows and your
scripts/testandscripts/formatexpects/bin/sh, so I can't pass thepre-commitsteplinter and test.This can be solved by using Git Bash: Git for Windows ships with git bash (i.e. a
sh.exeandbash.exe).This is another issue and requires another PR to fix.
adam-grant-hendry commentedon Oct 14, 2022
Actually, even easier than that: Just switch to using a portable shebang:
#!/usr/bin/env shLee-W commentedon Oct 17, 2022
Hi @adam-grant-hendry , I notice you create another issue regarding to it. If pre-commit does not work, could you please use
git commit ... --no-verifyandgit push ... --no-verifyas a temporary solution before we can sort the/bin/shissue out?Lee-W commentedon Oct 17, 2022
It would be even more helpful if you could document this on the doc for windows users. Thanks!
adam-grant-hendry commentedon Oct 23, 2022
@woile @Lee-W I have a working implementation with passing unit tests for Unicode characters (that is, emojis). Once PR #605 is merged, I'll push it up.
adam-grant-hendry commentedon Oct 23, 2022
Yes, great idea. I'll make another PR for docs. I can probably also resolve Issue #515 there as well. I spewed a bunch of comments there and have had some time to learn and practice, so I might clean that up a little bit and clarify things.
bearomorphism commentedon May 9, 2026
This issue appears to be resolved in current
master. The encoding is now configurable (defaulting to UTF-8) and applied consistently across file I/O:commitizen/defaults.py:ENCODING = "utf-8"and"encoding": ENCODINGinDEFAULT_SETTINGS.commitizen/commands/changelog.py: bothopen()calls inwrite_changelog/incremental_buildpassencoding=self.config.settings["encoding"].commands/,config/,providers/, andcz/.Users can also override it via the
encodingconfig setting if needed.Suggesting this can be closed. 🎉