gsutil rsync 'ascii' 编解码器无法解码位置 51 中的字节 0xe2:序数不在范围内(128)

Posted

技术标签:

【中文标题】gsutil rsync \'ascii\' 编解码器无法解码位置 51 中的字节 0xe2:序数不在范围内(128)【英文标题】:gsutil rsync 'ascii' codec can't decode byte 0xe2 in position 51: ordinal not in range(128)gsutil rsync 'ascii' 编解码器无法解码位置 51 中的字节 0xe2:序数不在范围内(128) 【发布时间】:2021-06-22 05:52:24 【问题描述】:

我正在使用我的 Debian 服务器中的 gsutil 命令将 rsync 文件传输到 GCP 存储桶,但它因以下错误而失败:

gsutil -m rsync -r -n files/ gs://my-bucket/files

At source listing 10000...
At source listing 20000...
At source listing 30000...
Caught non-retryable exception while listing file://files/: 'ascii' codec can't decode byte 0xe2 in position 51: ordinal not in range(128)
CommandException: Caught non-retryable exception - aborting rsync

gsutil 版本:4.52

大约需要传输 1TB 数据。

【问题讨论】:

您尝试过更新的 gsutl 吗? 4.52 是 9 个月和 9 个旧版本。 是的,现在更新到 gsutil 版本:4.60 仍然出现同样的错误。 它完全一样吗?我认为他们已经重新访问了错误消息以包含导致问题的文件,您可以检查一下吗?您是否还在运行受支持的 python 版本之一(Python 3(首选,3.5 到 3.8)和 Python 2(2.7.9 或更高版本))? 是的,完全相同的错误,这是服务器上的 Python 2.7.9 版本。 bucket中是否有包含非asci字符的文件? 【参考方案1】:

我通过遵循 php 代码解决了我自己的问题,该代码将迭代源目录并移动查找非 ascii 文件名并将它们移动到不同的位置。

也可以从文件名中删除非ASCII字符并使用相同的逻辑重命名,或者可以使用unlink方法删除。

<ul>
<?php
// this will help you to debug the code if you get some errors.
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

$source = 'source_files/'; // update this with your source path. 
$iterator = new RecursiveTreeIterator(new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS));

$dest = 'destination_path'; // update it with your destination path

foreach($iterator as $filename => $path) 
    if(preg_match('/[^\x20-\x7e]/', $path)) 
        echo "<li>".$filename."</li>";
        // rename($filename, $dest.pathinfo($filename, PATHINFO_BASENAME)); // Uncomment if you want to move it with some other location. 

        // unlink($filename); // Uncomment if you want to delete that file.
    

?>
</ul>

注意:确保您已为源目录和目标目录设置了正确的权限。

希望将来能对某人有所帮助。

谢谢

【讨论】:

以上是关于gsutil rsync 'ascii' 编解码器无法解码位置 51 中的字节 0xe2:序数不在范围内(128)的主要内容,如果未能解决你的问题,请参考以下文章

ascii' 编解码器无法编码字符 u'\xe2

gsutil api 谷歌存储近线

“UnicodeEncodeError:‘ascii’编解码器无法编码字符”

UnicodeEncodeError:“ascii”编解码器无法编码字符

Python3'ascii'编解码器无法编码字符

UnicodeDecodeError: 'ascii' 编解码器无法在位置解码字节 0xec