Имя файла, содержащее суперструну, вызывает ошибку gsutil - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть скрипт, который я запускаю из терминала, загружая файлы с gsutil в Centos 7, я получаю сообщение об ошибке с одним из моих имен файлов.

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 голосов
/ 06 февраля 2019

Эта строка не является допустимой последовательностью Юникода.Если вы возьмете байты и попытаетесь декодировать его, вы увидите ошибку:

>>> 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

Аналогично, если вы закодируете строку юникода, которая у вас есть вВаш вопрос, закодированные байты отличаются от того, что показано в ошибке.Это правильная версия этой строки в кодировке utf-8:

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

Уведомление \xc2\xb2 против \xe2\xb2.Я не уверен, что кодирует имя файла вашей файловой системы, но это не UTF-8.

...