包含超字符串的文件名导致gsutil错误

时间:2019-02-06 17:40:13

标签: utf-8 google-cloud-storage

我有一个从终端运行的脚本,在Centos 7中使用gsutil上传文件,我收到有关我的文件名之一的错误。

Caught non-retryable exception while listing file:///home//:
CommandException: Invalid Unicode path encountered
('/home/mysite/public_html/images/office-100-m\xe2\xb2.jpg').

我像这样检查python(注意超字符串):

>>> "office-100-m²-2.jpg".decode("utf-8")
u'office-100-m\xb2-2.jpg'

它解码吗?我期待看到一个错误。当我检查语言环境

python -c "import locale; print locale.getdefaultlocale()"
('en_US', 'UTF-8')

那有什么问题呢?

1 个答案:

答案 0 :(得分:0)

该字符串不是有效的unicode序列。如果您使用字节并尝试解码,则会看到错误:

>>> s = '/home/mysite/public_html/images/office-100-m\xe2\xb2.jpg'
>>> s.decode('utf-8')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/encodings/utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 44-45: invalid continuation byte

类似地,如果您对问题中的Unicode字符串进行编码,则编码后的字节与错误中显示的字节不同。这是该字符串的正确utf-8编码版本:

>>> u"office-100-m²-2.jpg".encode('utf-8')
'office-100-m\xc2\xb2-2.jpg'

通知\xc2\xb2\xe2\xb2。我不确定文件系统文件名的编码方式是什么,但它似乎不是UTF-8。