[gnome-cyr] Re: [Gnome-users] Вопрос о кодировках
- From: "=?koi8-r?b?89XLydHaz9c=?==?koi8-r?b?IPMu4S4=?=" <corwin micom net ru>
- To: gnome-users gnome ru
- Cc: gnome-cyr gnome org
- Subject: [gnome-cyr] Re: [Gnome-users] =?koi8-r?b?98/Q0s/TIM8=?==?koi8-r?b?IMvPxMnSz9fLwcg=?=
- Date: Tue, 4 Mar 2003 12:32:18 +0300
On Tuesday 04 March 2003 08:21, Dmitry G. Mastrukov wrote:
> Что ж, хорошее начало. Мне кажется, надо:
> 1. Написать тестовую программку, чтобы оценить, действительно ли
> gnome-vfs неверно работает с именами файлов.
Сам по себе gnome-vfs вроде нормально работает с именами файлов.
На примере gedit : там имя файла формируется с пом функции
gnome)vfs_get_local_path_from_uri() далее в системные вызовы.
Она и возвращает имя файла в Utf8 кодировке.
Я подумал - что можно попробовать изменить поведение этой функции так чтобы
возвращаемо локальное имя файла уже было в кодировке для локали.
Если программа не использует эту функцию - то проблема останется.
> 2. Если это так, создать баг на багзилле, прикрепив к нему этот патч
> (проверив его).
Это не патч :-)) Это просто пример, его еще доделывать и переделывать :-))
У меня просто сейчас на машине нет собранного gnome2 и времени нет
собирать (может на проздниках). Туды еще нужно добавить проверку на то
что текущая локаль не UTF8 :
if(g_is_utf8_locale()) {
/* Выполняем проверки и проеобразования и т.п. */
}
так что кто-нить попробуйте наложить этот diff-файл (см. письмо выше)
и поделитесь результатом.
> ЗЫ. Дальнейшее обсуждение этой проблемы предлагаю перенести в
> gnome-cyr gnome org, так как проблема носит технический характер и пути
> её решения могут быть не интересны пользователям Гнома, для которых этот
> список позиционируется. О результатах же непременно сюда сообщить.
Ладно. Я тот дифф присоединил с еще раз и копию кинул в gnome-cyr.
PS: Те же самые проблемы возникают и в других приложениях, которые используют
gtk2 (без gnome2) например xfce4 - там та же беда :-((
--
С Уважением
Сукиязов Сергей
Инженерный Центр МИКОМ
http://www.micom.net.ru
ICQ: 165166448
diff -Naur gnome-vfs-2.2.0.orig/libgnomevfs/gnome-vfs-utils.c gnome-vfs-2.2.0/libgnomevfs/gnome-vfs-utils.c
--- gnome-vfs-2.2.0.orig/libgnomevfs/gnome-vfs-utils.c Sat Dec 21 00:15:06 2002
+++ gnome-vfs-2.2.0/libgnomevfs/gnome-vfs-utils.c Mon Mar 3 19:54:24 2003
@@ -709,7 +709,8 @@
char *
gnome_vfs_get_local_path_from_uri (const char *uri)
{
- const char *path_part;
+ const char *path_part, *local_path_part;
+ char *result;
if (!_gnome_vfs_istr_has_prefix (uri, "file:/")) {
return NULL;
@@ -726,7 +727,16 @@
return NULL;
}
- return gnome_vfs_unescape_string (path_part, "/");
+ local_path_part = path_part;
+ if(g_utf8_validate(path_part,-1,0)) {
+ local_path_part = g_filename_from_utf8(path_part,-1,0,0,0);
+ }
+
+ result = gnome_vfs_unescape_string (local_path_part, "/");
+
+ if(local_path_part!=path_part) g_free(local_path_part);
+
+ return result;
}
/**
@@ -742,6 +752,7 @@
gnome_vfs_get_uri_from_local_path (const char *local_full_path)
{
char *escaped_path, *result;
+ char *utf8_full_path;
if (local_full_path == NULL) {
return NULL;
@@ -749,9 +760,15 @@
g_return_val_if_fail (local_full_path[0] == '/', NULL);
- escaped_path = gnome_vfs_escape_path_string (local_full_path);
+ utf8_full_path = local_full_path;
+ if(!g_utf8_validate(local_full_path,-1,0)) {
+ utf8_full_path = g_filename_to_utf8(local_full_path,-1,0,0,0);
+ }
+
+ escaped_path = gnome_vfs_escape_path_string (utf8_full_path);
result = g_strconcat ("file://", escaped_path, NULL);
g_free (escaped_path);
+ if(utf8_full_path!=local_full_path) g_free(utf8_full_path);
return result;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]