В документации по gnupg указано, что поля такие как UserID могуть быть закодированы в utf8 Также, в man 1 gpg указано: --with-colons Print key listings delimited by colons. Note that the output will be encoded in UTF-8 regardless of any --display-charset setting. This format is useful when GnuPG is called from scripts and other programs as it is easily machine parsed. The details of this format are documented in the file `doc/DETAILS', which is included in the GnuPG source distribution. т.е. поля выводится должны в utf8 Но при выводе поля искажаются. Steps to Reproduce: 1.Сгенерировать ключ с русским UserID (gpg --gen-key) 2.Вывести $gpg --list-key --with-colons Actual Results: на месте UserID будут крякозябры Expected Results: UserID должен быть в utf8
Created attachment 2061 [details] Исправляет ошибку Данная ошибка была обнаружена благодаря: https://bugzilla.altlinux.org/show_bug.cgi?id=10416 http://bugs.kde.org/show_bug.cgi?id=144368 Тоесть kgpg не отображает нормально UserId если он не в ASCII. Проблема заключается в том, что gpg c вызовом --list-key --with-colons изменяет так строки utf8, что они не стоновятся не правильными. Посмотрите пожалуйста патч.
(In reply to comment #0) > В документации по gnupg указано, что поля такие как UserID могуть быть > закодированы в utf8 > > Также, в man 1 gpg указано: > --with-colons > Print key listings delimited by colons. Note that the output will > be encoded in UTF-8 regardless of any --display-charset setting. > This format is useful when GnuPG is called from scripts and other > programs as it is easily machine parsed. The details of this format > are documented in the file `doc/DETAILS', which is included in the > GnuPG source distribution. > > > т.е. поля выводится должны в utf8 Согласно вышеупомянутому doc/DETAILS, User-ID кодируется следующим образом: "The value is quoted like a C string to avoid control characters" и далее по тексту. Не могу сказать, что авторы это хорошо придумали, результат такой кодировки не очень удобен ни для непосредственного восприятия, ни для разбора, однако они документировали именно такое поведение. Если уж квотить правильно, то следовало бы заменить *p < 0x20 || (*p >= 0x7f && *p < 0xa0) на аналог isprint() в локали C: *p < 0x20 || *p >= 0x7f
Резюмирую: код соответствует документации, если в ней прочесть то, что имели в виду авторы. Проблемы не вижу, баг закрываю.