问题解决:Conan 报"'ascii' codec can't decode byte 0xe5 in position 36: ordinal not in range(128)"

解决方案:

注意文件名的编码

解决过程:

在用 Conan 编译 C++过程中遇到报错"‘ascii’ codec can’t decode byte 0xe5 in position 36: ordinal not in range(128)
",困扰多时,问题如下:

***/1.5935.9@***/stable: Retrieving package 6d3344e2e47d9a7babae472f14e7df46f9d74492 from remote '***' 
Downloading conanmanifest.txt
[==================================================] 5.8KB/5.8KB      
Downloading conaninfo.txt
[==================================================] 462B/462B        
Downloading conan_package.tgz
[==================================================] 1.29GB/1.29GB    
Decompressing conan_package.tgz:  28%|██▊       | 347M/1.20G [00:04<00:09, 101MB/s] ***/1.5935.9@***/stable: ERROR: Exception while getting package: 6d3344e2e47d9a7babae472f14e7df46f9d74492
***/1.5935.9@***/stable: ERROR: Exception: <class 'conans.errors.ConanException'> Error while downloading/extracting files to /root/.conan/data/***/1.5935.9/***/stable/package/6d3344e2e47d9a7babae472f14e7df46f9d74492
'ascii' codec can't decode byte 0xe5 in position 36: ordinal not in range(128)
Folder removed
***/1.5935.9@***/stable: WARN: Trying to remove package folder: /root/.conan/data/***/1.5935.9/***/stable/package/6d3344e2e47d9a7babae472f14e7df46f9d74492
ERROR: Error while downloading/extracting files to /root/.conan/data/***/1.5935.9/***/stable/package/6d3344e2e47d9a7babae472f14e7df46f9d74492
'ascii' codec can't decode byte 0xe5 in position 36: ordinal not in range(128)

虽然知道是 Python 中常见编码问题,但是不可能改 Conan 源码,而且还不知道问题在哪儿,只能一脸懵逼。

后来,偶然在其他系统中拿到了堆栈详情:

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/conans/client/command.py", line 1428, in run
    method(args[0][1:])
  File "/usr/lib/python2.7/site-packages/conans/client/command.py", line 384, in install
    install_folder=args.install_folder)
  File "/usr/lib/python2.7/site-packages/conans/client/conan_api.py", line 88, in wrapper
    return f(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/conans/client/conan_api.py", line 533, in install
    no_imports=no_imports)
  File "/usr/lib/python2.7/site-packages/conans/client/manager.py", line 130, in install
    run_imports(conanfile, install_folder, output)
  File "/usr/lib/python2.7/site-packages/conans/client/importer.py", line 82, in run_imports
    conanfile.imports()
  File "/usr/lib/python2.7/site-packages/conans/client/loader_txt.py", line 97, in imports
    conan_file.copy(*import_params)
  File "/usr/lib/python2.7/site-packages/conans/client/importer.py", line 160, in __call__
    excludes=excludes, keep_path=keep_path)
  File "/usr/lib/python2.7/site-packages/conans/client/file_copier.py", line 82, in __call__
    copied_files = self._copy_files(files_to_copy, src, dst, keep_path, links)
  File "/usr/lib/python2.7/site-packages/conans/client/file_copier.py", line 193, in _copy_files
    abs_src_name = os.path.join(src, filename)
  File "/usr/lib64/python2.7/posixpath.py", line 80, in join
    path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 29: ordinal not in range(128)

ERROR: 'ascii' codec can't decode byte 0xe5 in position 29: ordinal not in range(128)

查阅 Github 上的对应源码:

abs_src_name = os.path.join(src, filename)

由此判断是文件名引起,检查发现一个包含中文的文件,处理后问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值