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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaosongluo/article/details/84349754

解决方案:

注意文件名的编码

解决过程:

在用 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)

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

猜你喜欢

转载自blog.csdn.net/xiaosongluo/article/details/84349754