Google 云构建触发器静态站点:'ascii'编解码器无法对字符进行编码



我的静态站点构建过程如下:

  1. 我创建了public文件夹
  2. 我复制public文件夹并重命名为gzipped.
  3. gzipped文件夹上,我运行以下代码:find . -type f -exec gzip "{}" ; -exec mv "{}.gz" "{}" ;
  4. 然后我推送我的存储库,构建会自动触发。

当我在.md文件中包含€字符时,如下所示,然后出现以下错误。显然它不喜欢在我的.md文件中写得如此- €1000的特殊字符(我猜破折号-是罪魁祸首):

tags:
- tag1
- €1000
- tag2
- tag3

这里的错误:Step #4: Caught non-retryable exception while listing file://./gzipped: 'ascii' codec can't encode characters in position 10-12: ordinal not in range(128) Step #4: CommandException: Caught non-retryable exception - aborting rsync.

如何在破折号前用欧元修复我的tags listing

当你说"推送到我的存储库"时,我假设你正在使用gsutil rsync命令,主要是由于你收到的错误消息,它来自以下代码行:

https://github.com/GoogleCloudPlatform/gsutil/blob/65d6a3e30e2ad51279841a8b58008a5396568ddd/gslib/commands/rsync.py#L645

瞥了一眼那里的代码,我不确定为什么 gsutil 会尝试使用 ASCII 编解码器。我的两个最佳猜测是:

  • 也许您正在运行具有一些编码错误的旧版本的 gsutil?您可以运行gsutil version进行检查。
  • 也许您正在使用ASCII(或不支持unicode字符)作为其默认编码的终端/环境中运行它?我从find命令中假设您正在Linux或macOS系统上运行 - 如果是这样,从shell中,您可以检查Python认为默认编码是什么:
$ python -c "import locale; print(locale.getdefaultlocale())"

这是我的终端发出的,它使用 UTF-8 作为默认编码:

('en_US', 'UTF-8')

最后,如果这没有帮助,您可能希望获得更多信息,而不仅仅是错误消息中显示的摘要文本 - 您可以尝试在本地 gsutil 安装(在<path-to-gsutil>/gslib/commands/rsync.py文件中)在我上面链接的行附近添加一些额外的print语句。理想情况下,您希望查看整个堆栈跟踪以查看错误的来源,因此在该except:块的正文中添加类似print(traceback.format_exc())的内容会很有用。

最新更新