Как правильно декодировать имена файлов utf7, полученные с сервера IMAP

Фактически catне зависит от $TMPDIR, но перенаправление оболочки <<зависит.

В этом случае кажется, что catпытается выполнить fstat()наstdin(fd 0 ), и по какой-то причине это не удается (из strace):

fstat(0, 0x7ffe16cc1ec0)                = -1 ENOENT (No such file or directory)

В обычных условиях это не проблема:

strace -f cat <<FOO
> bar
> FOO
execve("/usr/bin/cat", ["cat"], [/* 91 vars */]) = 0

...

fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0),...}) = 0
fstat(0, {st_mode=S_IFREG|0600, st_size=4,...}) = 0
fadvise64(0, 0, 0, POSIX_FADV_SEQUENTIAL) = 0
mmap(NULL, 139264, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f4844156000
read(0, "bar\n", 131072)                = 4
write(1, "bar\n", 4bar
)                    = 4
read(0, "", 131072)                     = 0
munmap(0x7f4844156000, 139264)          = 0
close(0)                                = 0
close(1)                                = 0
close(2)                                = 0
exit_group(0)                           = ?
+++ exited with 0 +++

Итак, еще раз :Это не ошибка в cat, а какая-то ошибка в виртуальной среде.

2
12.10.2020, 06:33
2 ответа

Быстрый тест преобразования кириллицы из UTF8 в UTF7

echo 'Here we go. Це коротке речення' | iconv -f utf-8 -t utf-7
Here we go. +BCYENQ +BDoEPgRABD4EQgQ6BDU +BEAENQRHBDUEPQQ9BE8

Читая описание кодировки UTF7 , я вижу, что (грубо говоря )каждой закодированной строке должен предшествовать +. В вашем списке каталогов UTF7 такого префикса нет.

Теперь, как вы видели, преобразование &в +в извлеченных вами данных не приводит к созданию допустимых кодовых точек,

echo '&BB4EQgQ,BEAEMAQyBDsENQQ9BD0ESwQ1-/' | tr '&' + | iconv -f utf-7 -t utf-8
От
iconv: (stdin):1:2: cannot convert

НО, если вы возьмете сами имена файлов, вы получите действительное преобразование, как только вы переключите &на +,

echo '&BCMENAQwBDsENQQ9BD0ESwQ1-' | tr '&' + | iconv -f utf-7 -t utf-8
Удаленные
1
18.03.2021, 22:58

В сущности, этот вопрос поставлен неправильно -. Дело в том, что IMAP(ab)использует utf-7. Это почти utf-7, но не совсем. В конце концов я решил свою проблему, используя этот код php из комментария документации php:

PHP-документация для imap -utf7

0
18.03.2021, 22:58

Теги

Похожие вопросы