| Summary: | mkisofs не работает в локали ru_RU.UTF-8 | ||||||
|---|---|---|---|---|---|---|---|
| Product: | Sisyphus | Reporter: | Anton Farygin <rider> | ||||
| Component: | mkisofs | Assignee: | Konstantin A Lepikhov (L.A. Kostis) <lakostis> | ||||
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
| Severity: | blocker | ||||||
| Priority: | P5 | CC: | lakostis, lav | ||||
| Version: | unstable | ||||||
| Hardware: | all | ||||||
| OS: | Linux | ||||||
| Bug Depends on: | |||||||
| Bug Blocks: | 7079, 7371 | ||||||
| Attachments: |
|
||||||
|
Description
Anton Farygin
2005-07-21 15:02:13 MSD
мало ли что говорят, я вот не вижу в списке допустимых кодировок utf8. Приведите пример командной строки с явным указанием utf8-кодировки для mkisofs, который работает. про переменные:
согласно коду natspec:
tmp = getenv ("LANGUAGE"); - LANGUAGE для опеределения кодировок - это труба.
Нужно смотреть на LANG
natspec_get_system_locale() - get_from_system_i18n("LANG"); - это конечно все
правильно, но зачем тогда брать пользовательскую LANGUAGE, где черт знает что
может быть написано ?
1. Тестируется след. версия natspec, где анализ LANGUAGE убран, поскольку он
относится только к выводу сообщения.
2.
Вот весь патч к mkisofs, который был:
+#ifdef HAVE_NATSPEC
+ nls = load_nls(natspec_get_filename_encoding(""));
+#else
nls = load_nls("iso8859-1");
+#endif
То есть влияет только на кодировку по умолчанию. Если iso8859-1 в UTF системе
незаметно подменяется на utf8 где-то дальше, то это бага mkisofs, я готов
помочь с поиском/исправлением.
Судя по ругани k3b, которая приведена в баге, mkisofs вызывается с явно
указанной кодировкой.
Хотелось бы видеть,
1) что k3b выводит в консоль про запуск mkisofs при попытке создания образа
2) Если есть вопросы к natspec, то что говорит в локали UTF8
$ natspec -fv
$ natspec -fv
System locale: ru_RU.UTF-8
Filename encoding in iconv/nls form: utf8
При этом явно сказано, что mkisofs не поддерживает utf8.
Т.е. - для него не надо заводить такую перекодировку.
Т.е. - в этом случае:
+#ifdef HAVE_NATSPEC
+ nls = load_nls(natspec_get_filename_encoding(""));
+#else
nls = load_nls("iso8859-1");
+#endif
nls получается равным utf8, которого нет в списке, в итоге вылетает ошибка
Тут нужно или убирать natspec вообще, или делать проверку на наличие полученной
кодировки в списке поддерживаемых mkisofs'ом.
Предлагается применить патч, чтобы mkisofs узнал что такое utf8:
--- nls_base.c.o 2001-01-21 00:18:33 +0300
+++ libunls/nls_base.c 2005-07-21 16:08:48 +0400
@@ -113,6 +113,8 @@
int ret;
#endif
+ if (!strcmp(charset,"utf8"))
+ charset = "iso8859-1";
nls = find_nls(charset);
if (nls) {
nls->inc_use_count();
(In reply to comment #5) > + if (!strcmp(charset,"utf8")) > + charset = "iso8859-1"; Т.к. по-умолчанию у нас будет "iso8859-1", то natspec получается не нужен :-( (In reply to comment #6) > (In reply to comment #5) > > + if (!strcmp(charset,"utf8")) > > + charset = "iso8859-1"; > Т.к. по-умолчанию у нас будет "iso8859-1", то natspec получается не нужен :-( По умолчанию будет utf8 > Предлагаю оторвать чего-нить автору natspec
Человек решает проблемы. А то, что новые вылазят на последних стадиях
тестирования -- проблема организации оного тестирования.
Предлагаю одуматься.
Created attachment 1010 [details] Обновлённый патч для natspec Я добавил распознавание utf8 к основному патчу, пакет нужно просто пересобрать с новым патчем. На всякий случай выложил пакеты с исправленными исходным пакетом и бинарниками на ftp://ftp.altlinux.ru/pub/people/lav/cdrtools Кто-нить проверял сборки, которые выложил Виталий? Собственно, я могу просто пересобрать cdrtools с новым libnatspec, т.к. уникодного окружения у меня нет. пересобери, плз. Кстати, насколько я понял - пересобирать надо с новым патчем, а не с новым libnatspec. Проверил сборки Виталия - вроде всё работает. раз ничего не сломалось, закрываю. |