Buildozer全项目出现UnicodeEncodeError('latin-1')报错求助
解决Buildozer构建时的UnicodeEncodeError问题
所有Buildozer项目构建时均触发以下Unicode编码错误,已尝试删除.buildozer及相关缓存文件夹后重新构建,问题未解决:
Traceback (most recent call last): File "/usr/local/bin/buildozer", line 33, in <module> sys.exit(load_entry_point('buildozer==1.4.1.dev0', 'console_scripts', 'buildozer')()) File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/scripts/client.py", line 13, in main Buildozer().run_command(sys.argv[1:]) File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/__init__.py", line 1024, in run_command self.target.run_commands(args) File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/target.py", line 93, in run_commands func(args) File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/target.py", line 103, in cmd_debug self.buildozer.prepare_for_build() File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/__init__.py", line 180, in prepare_for_build self.target.compile_platform() File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/targets/android.py", line 841, in compile_platform self._p4a(p4a_create, get_stdout=True)[0] File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/targets/android.py", line 133, in _p4a return self.buildozer.cmd([*self._p4a_cmd, *cmd, *self.extra_p4a_args], **kwargs) File "/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/__init__.py", line 316, in cmd stdout.write(chunk.decode('utf-8', 'replace')) UnicodeEncodeError: 'latin-1' codec can't encode characters in position 7616-7677: ordinal not in range(256)
解决方法
修改Buildozer源码编码逻辑
定位到报错文件/usr/local/lib/python3.10/dist-packages/buildozer-1.4.1.dev0-py3.10.egg/buildozer/__init__.py的第316行,将原代码替换为以下内容,强制兼容输出编码:# 先解码为utf-8,再编码为utf-8后用latin-1兼容输出 stdout.write(chunk.decode('utf-8', 'replace').encode('utf-8').decode('latin-1', 'replace'))或者直接重置标准输出流为utf-8编码:
import sys # 确保stdout使用utf-8编码 if sys.stdout.encoding != 'utf-8': sys.stdout = open(sys.stdout.fileno(), mode='w', encoding='utf-8', buffering=1) stdout.write(chunk.decode('utf-8', 'replace'))设置系统环境变量强制UTF-8
在执行Buildozer命令前,临时设置环境变量:export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8若需永久生效,可将上述两行添加到
~/.bashrc(Bash)或~/.zshrc(Zsh)文件末尾,重启终端后生效。升级Buildozer版本
当前使用的是开发版1.4.1.dev0,编码处理可能存在bug,尝试升级到稳定版:pip install --upgrade buildozer若稳定版仍有问题,可尝试安装最新开发分支:
pip install git+https://github.com/kivy/buildozer.git
内容的提问来源于stack exchange,提问作者denmkit
相关产品推荐
相关产品推荐

