LINUX.ORG.RU

file-chooser-dialog vs криллица в CL-GTK2+


0

1
defun Выбор-файла ()
  (let* ((dlg (make-instance 'file-chooser-dialog
							:action :open
							:title "Загрузить"
							:window-position :center-on-parent)))
    (dialog-add-button dlg "Отмена" :cancel)
    (dialog-add-button dlg "Открыть" :ok)
    (set-dialog-alternative-button-order dlg (list :ok :cancel))
    (setf (dialog-default-response dlg) :ok)
	(g-signal-connect dlg "response"(lambda (dialog1 response-id)
					  (declare (ignore dialog1 response-id))
					  (if (= response-id '-5) (progn(Загрузка(file-chooser-filename dlg))
					  (object-destroy dlg))) (object-destroy dlg)))	
	(g-signal-connect dlg "ok" (lambda (dialog1 response-id)
					  (declare (ignore dialog1 response-id))
					  (Загрузка (file-chooser-filename dlg))
					  (object-destroy dlg)))							  
    (widget-show dlg)))

Есть кусок кода всё супер работает пока не попадается файл на кириллице... вот что он пишет.

Illegal :UTF-8 character starting at position 13.
   [Condition of type BABEL-ENCODINGS:INVALID-UTF8-CONTINUATION-BYTE]

Restarts:
 0: [RETURN-FROM-G-CLOSURE] Return value from closure
 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "cl-gtk2 main thread" RUNNING {25237621}>)

Backtrace:
  0: ((LAMBDA (BABEL-ENCODINGS::SRC BABEL-ENCODINGS::START BABEL-ENCODINGS::END BABEL-ENCODINGS::DEST BABEL-ENCODINGS::D-START)) #.(SB-SYS:INT-SAP #X02A54260) 0 33 "c:\\Lisp\\SBCL\\ 
Как мне заставить GTK понимать кириллицу? Я так понимаю всё таки GTK не воспринимает кириллицу а не лисп, потому что если я макросу (with-open-file (поток «C:/lisp/sbcl/Пробнаясохранка.arts»)) то всё ок а вот если GTK то ... прошу помочь.

При всём при том что в окне выбора файла всё хорошо отображаются и русские и инглиш. Получается две разные фнкции работают одна выбирает для отображения в окне диалога, а вторая формирует абсолютный путь, но вот как исправить вторую функцию это вопрос.

RusNekromant ()
G_BROKEN_FILENAMES=1
G_FILENAME_ENCODING="@locale"

пропиши, где там в винде переменные окружения прописываются

ananas ★★★★★ ()
Ответ на: комментарий от ananas

Непомогло((( Я прописал и в системных и для пользователя всё равно одно и тоже.... прописывал так Имя переменной G_BROKEN_FILENAMES Значение 1 Имя переменной G_FILENAME_ENCODING Значение «@locale»

Всё правильно или я ошибся? Комп перезагружал после добавления сред.

RusNekromant ()
Ответ на: комментарий от ananas

Пробовал не получается((( даже пробовал прописать UTF-8 и ANSI тоже не получается.

RusNekromant ()
Ответ на: комментарий от ananas

Кстати нужно прописывать или первую или вторую вот тут статья http://web.opennet.ru/docs/RUS/glib_api/glib-running.html Но всё равно не получается хотя ща попробую по другому немного... Кстати имеет значение где прописанна переменная? Просто тут есть для пользователя и для всех пользователей(системные среды) я сейчас дублирую.

RusNekromant ()
Ответ на: комментарий от RusNekromant

в принципе, под виндой эти переменные могут и не иметь эффекта. там вроде все в utf-8

ananas ★★★★★ ()
Ответ на: комментарий от RusNekromant

G_FILENAME_ENCODING. Эта переменная окружения может определять разделённый запятыми список имён наборов символов. GLib предполагает что имена файлов находятся в кодировке первого набора символов в этом списке вместо UTF-8. Специальная лексема «@locale» может использоваться для определения набора символов текущей локали (locale).

G_BROKEN_FILENAMES. Если эта переменная окружения установлена, GLib предполагает что имена файлов находятся в кодировке локали (locale) вместо UTF-8. G_FILENAME_ENCODING имеет приоритет над G_BROKEN_FILENAMES.

То есть по умолчанию G_BROKEN_FILENAMES установленна на UTF-8 что хорошо так как русский язык в этой кодировке есть, там вообще порядка 100000 символов... и странно таки что в окне по русски всё нормально а вот когда file-chooser-filename достаёшь то там такая фигня.... Одним словом проблемма не решена жду помощи.

RusNekromant ()

Скорей всего дело в cffi:*default-foreign-encoding*, которая по умолчанию выставленна в utf-8, а тебе скорей всего нужно выставить её в :cp1251. Т.е. либо

(let ((cffi:*default-foreign-encoding* :cp1251))
  ... ;; здесь твой код)

либо просто при загрузке

(setf cffi:*default-foreign-encoding* :cp1251)

При этом, важно, что бы используемая версия babel содержала в себе cp1251, ибо последний релиз был ещё без cp1251. Т.е. надо брать babel из darcs. Если установишь новую версию babel, то надо будет грохнуть fasl-файлы для CFFI, иначе возможны баги (у меня были).

archimag ★★★ ()
Ответ на: комментарий от archimag

Я скачал дополнительно в пакет babel enc-cp1251.lisp потом пришлось редактировать babel.asd но это не помогло пишет какую то ошибку при запуске главного окна. И тут два неотвеченных вопроса остаются во первых почему это UTF-8, универсальная кодировка, не видит русского? И второй вопрос, почему в диалоговом окне выбора файлов, которое явно не виндовского происхождения, русские названия есть ( да и тот файл я нормально читаю) а вот когда хочу получить имя мне пишет такую фигню? Почему нельзя разве с окна было взять название файла? Хотя конечно больше вопрос к тому кто писал код, а не к archimag-у и ananas-у. Причём повторюсь лиспу всё равно на имя файла он понимает любые символы, ну или по крайней мере кириллицу точно.

RusNekromant ()
Ответ на: комментарий от RusNekromant

lisp, может, и понимает. а glib под виндой воспринимает только utf-8. подобные ошибки говорят, что ему (glib-у) пытаются подсунуть не utf-8 имя файла.

ananas ★★★★★ ()
Ответ на: комментарий от RusNekromant

> но это не помогло пишет какую то ошибку при запуске главного окна.

Какую?

И тут два неотвеченных вопроса остаются во первых почему это

UTF-8, универсальная кодировка, не видит русского?



Не корректная постановка вопроса, так нельзя говорить. Кодировка не может чего-либо видеть, это просто формат. UTF-8 не имеет каких-либо проблем с поддержкой русского, как, впрочем, и других языков.

Причём повторюсь лиспу всё равно на имя файла он понимает

любые символы, ну или по крайней мере кириллицу точно.



То, что лисп с кириллицей работает нормально совершенно естественно, ибо в SBCL есть полноценная поддержка Unicode. Так и должно быть.

А вот на уровне взаимодействия с gtk возможны проблемы, ибо оно производится через FFI и при преобразовании строк необходимо указывать используемую кодировку, по-умолчанию используется UTF-8.

У тебя конкретно эту ошибку вызывает babel, т.е. проблема в том, что кодировка обрабатываемой строки не соответствует ожидаемой. Ожидается, судя по сообщению - utf-8, а реально подается, скорей всего, cp1251.

archimag ★★★ ()
Ответ на: комментарий от ananas

> подобные ошибки говорят, что ему (glib-у) пытаются подсунуть

не utf-8 имя файла.


Нет, glib здесь не при чём, ошибку порождает babel и как раз ругается на то, что это не utf-8.

archimag ★★★ ()
Ответ на: комментарий от archimag

Итак собрал полность Babel всё скачал сам новое проверил насчёт CP1251 и тд. В код теперь выглядит во так

(defun Выбор-файла () (let ((cffi:*default-foreign-encoding* :cp1251)) (let* ((dlg (make-instance 'file-chooser-dialog                      :action :open                      :title "Загрузить"                      :window-position :center-on-parent                      :default-width 300                      :default-height 150))) (dialog-add-button dlg "Отмена" :cancel) (dialog-add-button dlg "Открыть" :ok) (set-dialog-alternative-button-order dlg (list :ok :cancel)) (setf (dialog-default-response dlg) :ok)    (g-signal-connect dlg "response"(lambda (dialog1 response-id)                 (declare (ignore dialog1 response-id))                 (if (= response-id '-5) (progn(Загрузка(file-chooser-filename dialog1))                 (object-destroy dlg))) (object-destroy dlg)))       (g-signal-connect dlg "ok" (lambda (dialog1 response-id)                 (declare (ignore dialog1 response-id))                 (Загрузка (file-chooser-filename dlg))                 (object-destroy dlg)))                      (widget-show dlg))))

При вызове диалога загрузки вылетает ошибка...(fasl файлы предварительно удалил)

:CP1251 is not a valid encoding designator [Condition of type SIMPLE-ERROR]

Restarts: 0: [RETURN-FROM-G-CLOSURE] Return value from closure 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "cl-gtk2 main thread" RUNNING {26240621}>)

Backtrace: 0: (BABEL-ENCODINGS:LOOKUP-MAPPING #<HASH-TABLE :TEST EQ :COUNT 46 {2488A721}> :CP1251) 1: (CFFI:FOREIGN-STRING-ALLOC "GtkFileChooserDialog")[:EXTERNAL] 2: ((SB-PCL::FAST-METHOD CFFI:TRANSLATE-TO-FOREIGN (STRING CFFI::FOREIGN-STRING-TYPE)) #<unavailable argument> #<unavailable argument> "GtkFileChooserDialog" #<CFFI::FOREIGN-STRING-TYPE :CP1251>) 3: (GOBJECT.FFI:G-TYPE-FROM-NAME "GtkFileChooserDialog") 4: (GOBJECT.FFI:G-TYPE-CLASS-REF "GtkFileChooserDialog") 5: (GOBJECT:CLASS-PROPERTY-INFO "GtkFileChooserDialog" "default-height") 6: (GOBJECT::G-OBJECT-TYPE-PROPERTY-TYPE "GtkFileChooserDialog" "default-height")[:EXTERNAL] 7: (GOBJECT:G-OBJECT-CALL-CONSTRUCTOR "GtkFileChooserDialog" ("default-height" "default-width" "window-position" "title" "action") (150 300 :CENTER-ON-PARENT "Загрузить" :OPEN) (NIL NIL NIL NIL NIL)) 8: (GOBJECT::CREATE-GOBJECT-FROM-CLASS-AND-INITARGS #<GOBJECT:GOBJECT-CLASS GTK:FILE-CHOOSER-DIALOG> (:ACTION :OPEN :TITLE "Загрузить" :WINDOW-POSITION :CENTER-ON-PARENT ...)) 9: ((SB-PCL::FAST-METHOD MAKE-INSTANCE (GOBJECT:GOBJECT-CLASS)) ..)[:EXTERNAL] 10: (ПАКЕТ.ГЛАВНЫЙ::ВЫБОР-ФАЙЛА)

RusNekromant ()
Ответ на: комментарий от RusNekromant

Lorcode нада доработать а то как то не очень что то понятно выводит...

(defun Выбор-файла ()
(let ((cffi:*default-foreign-encoding* :cp1251))
  (let* ((dlg (make-instance 'file-chooser-dialog
							:action :open
							:title "Загрузить"
							:window-position :center-on-parent
							:default-width 300
							:default-height 150)))
    (dialog-add-button dlg "Отмена" :cancel)
    (dialog-add-button dlg "Открыть" :ok)
    (set-dialog-alternative-button-order dlg (list :ok :cancel))
    (setf (dialog-default-response dlg) :ok)
	(g-signal-connect dlg "response"(lambda (dialog1 response-id)
					  (declare (ignore dialog1 response-id))
					  (if (= response-id '-5) (progn(Загрузка(file-chooser-filename dialog1))
					  (object-destroy dlg))) (object-destroy dlg)))	
	(g-signal-connect dlg "ok" (lambda (dialog1 response-id)
					  (declare (ignore dialog1 response-id))
					  (Загрузка (file-chooser-filename dlg))
					  (object-destroy dlg)))							  
    (widget-show dlg))))

RusNekromant ()
Ответ на: комментарий от RusNekromant

> :CP1251 is not a valid encoding designator
> [Condition of type SIMPLE-ERROR]

Давай разбираться по шагам, а просто:

(babel:octets-to-string (babel:string-to-octets "Привет мир!" :encoding :cp1251) :encoding :cp1251)
работает?

archimag ★★★ ()
Ответ на: комментарий от RusNekromant

вот так

(babel:octets-to-string (babel:string-to-octets "Привет мир!" :encoding :utf-8) :encoding :utf-8)
тоже работает

RusNekromant ()
Ответ на: комментарий от RusNekromant

Хм, попробуй грохнуть вообще все fasl-файлы. Либо надо искать функцию, которая выдаёт:

:CP1251 is not a valid encoding designator


и смотреть что там внутри. Это можно сделать прям в отладчике (в SLIME), нажав M-. на функции в стэке вызовов.

archimag ★★★ ()
Ответ на: комментарий от archimag

эммммм ну если чесно я вообще то плохо понял что нужно было сделать, но при нажатии мыши, в отладчике на последнюю строку, выдало вот это:

:CP1251 is not a valid encoding designator
   [Condition of type SIMPLE-ERROR]

Restarts:
 0: [RETURN-FROM-G-CLOSURE] Return value from closure
 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "cl-gtk2 main thread" RUNNING {262A0621}>)

Backtrace:
  0: (BABEL-ENCODINGS:LOOKUP-MAPPING #<HASH-TABLE :TEST EQ :COUNT 46 {24899519}> :CP1251)
      Locals:
        SB-DEBUG::ARG-0 = #<HASH-TABLE :TEST EQ :COUNT 46 {24899519}>
        SB-DEBUG::ARG-1 = :CP1251
  1: (CFFI:FOREIGN-STRING-ALLOC "GtkFileChooserDialog")[:EXTERNAL]
  2: ((SB-PCL::FAST-METHOD CFFI:TRANSLATE-TO-FOREIGN (STRING CFFI::FOREIGN-STRING-TYPE)) #<unavailable argument> #<unavailable argument> "GtkFileChooserDialog" #<CFFI::FOREIGN-STRING-TYPE :CP1251>)
  3: (GOBJECT.FFI:G-TYPE-FROM-NAME "GtkFileChooserDialog")
  4: (GOBJECT.FFI:G-TYPE-CLASS-REF "GtkFileChooserDialog")
  5: (GOBJECT:CLASS-PROPERTY-INFO "GtkFileChooserDialog" "default-height")
  6: (GOBJECT::G-OBJECT-TYPE-PROPERTY-TYPE "GtkFileChooserDialog" "default-height")[:EXTERNAL]
  7: (GOBJECT:G-OBJECT-CALL-CONSTRUCTOR "GtkFileChooserDialog" ("default-height" "default-width" "window-position" "title" "action") (150 300 :CENTER-ON-PARENT "Загрузить" :OPEN) (NIL NIL NIL NIL NIL))
  8: (GOBJECT::CREATE-GOBJECT-FROM-CLASS-AND-INITARGS #<GOBJECT:GOBJECT-CLASS GTK:FILE-CHOOSER-DIALOG> (:ACTION :OPEN :TITLE "Загрузить" :WINDOW-POSITION :CENTER-ON-PARENT ...))
  9: ((SB-PCL::FAST-METHOD MAKE-INSTANCE (GOBJECT:GOBJECT-CLASS)) ..)[:EXTERNAL]
 10: (ПАКЕТ.ГЛАВНЫЙ::ВЫБОР-ФАЙЛА)

RusNekromant ()
Ответ на: комментарий от RusNekromant

> в отладчике на последнюю строку, выдало вот это:

(BABEL-ENCODINGS:LOOKUP-MAPPING #<HASH-TABLE :TEST EQ :COUNT 46 {24899519}> :CP1251)


Не, явно что-то не так с babel. Конкретно, не находится cp1251, при этом, какое странное сообщение об ошибке.

Набери в REPL: cffi::*foreign-string-mappings* , результатом будет hash-table, теперь поставь на неё курсор и выполни команду M-x slime-inspect (сокращённо C-c I) - откроется инспектор, можно будет наглядно посмотреть какие кодировки представлены. Есть ли там запись для cp1251? Ты мог удалить, например, не те fasl-файлы и значение этой таблицы могло остаться прежним.

archimag ★★★ ()
Ответ на: комментарий от archimag

Там вообще нет кодировок там мона открыть :test EQ :COUNT 46. EQ ошибка 46 пишет вот что

 #<(INTEGER 0 536870911) {B8}>
--------------------
Value: 46 = #x0000002E = #o56 = #b101110 = 4.6e+1
Code-char: #\.
Integer-length: 6
Universal-time: "1900-01-01T03:00:46+03:00"

RusNekromant ()
Ответ на: комментарий от RusNekromant

Сори всё есть там надо было правой кнопкой меню вызвать и нажать инспект из EMACS так вот что пишет

#<HASH-TABLE {2472FBC9}>
--------------------
Count: 46
Size: 64
Test: EQ
Rehash size: 1.5
Rehash threshold: 1.0
[clear hashtable]
Contents: 
:ARABIC = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A39}> [remove entry]
:ASCII = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39C9}> [remove entry]
:CYRILLIC = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A29}> [remove entry]
:EBCDIC-US = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39D9}> [remove entry]
:GREEK = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A49}> [remove entry]
:HEBREW = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A59}> [remove entry]
:IBM-037 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39D9}> [remove entry]
:ISO-8859-1 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39E9}> [remove entry]
:ISO-8859-10 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A79}> [remove entry]
:ISO-8859-11 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A89}> [remove entry]
:ISO-8859-13 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A99}> [remove entry]
:ISO-8859-14 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AA9}> [remove entry]
:ISO-8859-15 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AB9}> [remove entry]
:ISO-8859-16 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AC9}> [remove entry]
:ISO-8859-2 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39F9}> [remove entry]
:ISO-8859-3 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A09}> [remove entry]
:ISO-8859-4 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A19}> [remove entry]
:ISO-8859-5 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A29}> [remove entry]
:ISO-8859-6 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A39}> [remove entry]
:ISO-8859-7 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A49}> [remove entry]
:ISO-8859-8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A59}> [remove entry]
:ISO-8859-9 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A69}> [remove entry]
:LATIN-1 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39E9}> [remove entry]
:LATIN-10 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AC9}> [remove entry]
:LATIN-2 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39F9}> [remove entry]
:LATIN-3 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A09}> [remove entry]
:LATIN-4 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A19}> [remove entry]
:LATIN-5 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A69}> [remove entry]
:LATIN-6 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A79}> [remove entry]
:LATIN-8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AA9}> [remove entry]
:LATIN-9 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AB9}> [remove entry]
:LATIN1 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39E9}> [remove entry]
:LATIN10 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AC9}> [remove entry]
:LATIN2 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39F9}> [remove entry]
:LATIN3 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A09}> [remove entry]
:LATIN4 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A19}> [remove entry]
:LATIN5 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A69}> [remove entry]
:LATIN6 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3A79}> [remove entry]
:LATIN8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AA9}> [remove entry]
:LATIN9 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AB9}> [remove entry]
:UCS-4 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3B09}> [remove entry]
:US-ASCII = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB39C9}> [remove entry]
:UTF-16 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AF9}> [remove entry]
:UTF-32 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3B09}> [remove entry]
:UTF-8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AD9}> [remove entry]
:UTF-8B = #<BABEL-ENCODINGS::CONCRETE-MAPPING {24EB3AE9}> [remove entry]

RusNekromant ()
Ответ на: комментарий от RusNekromant

> Там вообще нет кодировок там мона открыть :test EQ :COUNT 46

Чего? Вот как выглядит у меня

CL-USER> cffi::*foreign-string-mappings*
#<HASH-TABLE :TEST EQ :COUNT 47 {B860E21}>

Теперь вызов M-x slime-inspect на #<HASH-TABLE :TEST EQ :COUNT 47 {B860E21}> показывает такой буфен:

#<HASH-TABLE {B860E21}>
--------------------
Count: 47
Size: 64
Test: EQ
Rehash size: 1.5
Rehash threshold: 1.0
[clear hashtable]
Contents: 
:ARABIC = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD249}> [remove entry]
:ASCII = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD1D9}> [remove entry]
:CP1251 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD329}> [remove entry]
:CYRILLIC = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD239}> [remove entry]
:EBCDIC-US = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD1E9}> [remove entry]
:GREEK = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD259}> [remove entry]
:HEBREW = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD269}> [remove entry]
:IBM-037 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD1E9}> [remove entry]
:ISO-8859-1 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD1F9}> [remove entry]
:ISO-8859-10 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD289}> [remove entry]
:ISO-8859-11 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD299}> [remove entry]
:ISO-8859-13 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2A9}> [remove entry]
:ISO-8859-14 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2B9}> [remove entry]
:ISO-8859-15 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2C9}> [remove entry]
:ISO-8859-16 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2D9}> [remove entry]
:ISO-8859-2 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD209}> [remove entry]
:ISO-8859-3 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD219}> [remove entry]
:ISO-8859-4 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD229}> [remove entry]
:ISO-8859-5 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD239}> [remove entry]
:ISO-8859-6 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD249}> [remove entry]
:ISO-8859-7 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD259}> [remove entry]
:ISO-8859-8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD269}> [remove entry]
:ISO-8859-9 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD279}> [remove entry]
:LATIN-1 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD1F9}> [remove entry]
:LATIN-10 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2D9}> [remove entry]
:LATIN-2 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD209}> [remove entry]
:LATIN-3 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD219}> [remove entry]
:LATIN-4 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD229}> [remove entry]
:LATIN-5 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD279}> [remove entry]
:LATIN-6 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD289}> [remove entry]
:LATIN-8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2B9}> [remove entry]
:LATIN-9 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2C9}> [remove entry]
:LATIN1 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD1F9}> [remove entry]
:LATIN10 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2D9}> [remove entry]
:LATIN2 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD209}> [remove entry]
:LATIN3 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD219}> [remove entry]
:LATIN4 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD229}> [remove entry]
:LATIN5 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD279}> [remove entry]
:LATIN6 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD289}> [remove entry]
:LATIN8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2B9}> [remove entry]
:LATIN9 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2C9}> [remove entry]
:US-ASCII = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD1D9}> [remove entry]
:UTF-16 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD309}> [remove entry]
:UTF-32 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD319}> [remove entry]
:UTF-8 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2E9}> [remove entry]
:UTF-8B = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD2F9}> [remove entry]
:WINDOWS-1251 = #<BABEL-ENCODINGS::CONCRETE-MAPPING {C2CD329}> [remove entry]
archimag ★★★ ()
Ответ на: комментарий от RusNekromant

А, ну здесь ясно видно, что cp1251 нет. Проблема однозначно в том, что CFFI использует старые fasl-файлы. Вообще, зачем так в CFFI сделали мне не ясно, но при любом обновлении babel нужно чистить fasl-файлы для CFFI. Т.е. надо найти эти fasl-файлы и удалить их.

Возможно, что в системе есть несколько мест с этими fasl-файлами, так могло сложиться при изменении конфигов или при переходе на asdf2, так что вы могли удалить не ту версию этих файлов.

archimag ★★★ ()
Ответ на: комментарий от RusNekromant

Это смешно уже)))))) в хэш таблице есть CP1251 теперь окно не отображает на кнопках ничего и всё таже ошибка лезет с utf-8

RusNekromant ()
Ответ на: комментарий от RusNekromant

Вот что он пишет

 Illegal :UTF-8 character starting at position 13.
   [Condition of type BABEL-ENCODINGS:INVALID-UTF8-CONTINUATION-BYTE]

Restarts:
 0: [RETURN-FROM-G-CLOSURE] Return value from closure
 1: [TERMINATE-THREAD] Terminate this thread (#<THREAD "cl-gtk2 main thread" RUNNING {267E3621}>)

Backtrace:
  0: ((LABELS BABEL-ENCODINGS::UTF-8-DECODER) #<unavailable lambda list>)
      [No Locals]
  1: (CFFI:FOREIGN-STRING-TO-LISP #.(SB-SYS:INT-SAP #X05674820))[:EXTERNAL]
      Locals:
        SB-DEBUG::ARG-0 = 3
        SB-DEBUG::ARG-1 = #.(SB-SYS:INT-SAP #X05674820)
  2: ((SB-PCL::FAST-METHOD CFFI:TRANSLATE-FROM-FOREIGN (T CFFI::FOREIGN-STRING-TYPE)) #<unavailable argument> #<unavailable argument> #.(SB-SYS:INT-SAP #X05674820) #<CFFI::FOREIGN-STRING-TYPE :UTF-8>)
      Locals:
        SB-DEBUG::ARG-0 = :<NOT-AVAILABLE>
        SB-DEBUG::ARG-1 = :<NOT-AVAILABLE>
        SB-DEBUG::ARG-2 = #.(SB-SYS:INT-SAP #X05674820)
        SB-DEBUG::ARG-3 = #<CFFI::FOREIGN-STRING-TYPE :UTF-8>
  3: ((SB-PCL::FAST-METHOD CFFI:TRANSLATE-FROM-FOREIGN (T GLIB::G-STRING-TYPE)) #<unavailable argument> #<unavailable argument> #.(SB-SYS:INT-SAP #X05674820) #<GLIB::G-STRING-TYPE {26556491}>)
  4: ((LAMBDA (GOBJECT::OBJECT)) #<GTK:FILE-CHOOSER-DIALOG {25DAC811}>)
  5: (SLOT-VALUE #<GTK:FILE-CHOOSER-DIALOG {25DAC811}> GTK::FILENAME)
  6: ((LAMBDA (ПАКЕТ.ГЛАВНЫЙ::DIALOG1 ПАКЕТ.ГЛАВНЫЙ::RESPONSE-ID)) #<GTK:FILE-CHOOSER-DIALOG {25DAC811}> -5)
  7: (GOBJECT::CALL-WITH-RESTARTS #<CLOSURE (LAMBDA #) {25DC8A9D}> (#<GTK:FILE-CHOOSER-DIALOG {25DAC811}> -5))
  8: ((LAMBDA (GOBJECT::CLOSURE GOBJECT::RETURN-VALUE GOBJECT::COUNT-OF-ARGS GOBJECT::ARGS GOBJECT::INVOCATION-HINT GOBJECT::MARSHAL-DATA)) ..)
  9: ((LAMBDA (SB-ALIEN::ARGS-POINTER SB-ALIEN::RESULT-POINTER FUNCTION)) 18643695 18643691 #<FUNCTION (LAMBDA #) {2431F7F5}>)
 10: ("foreign function: #x4197C0")

правда ща поставил (let ((cffi:*default-foreign-encoding* :WINDOWS-1251)) но от этого сообщение не изменилось. И опять же пропали надписи с кнопок.

RusNekromant ()

Хм, интересно. Я думал, что в Gtk+ и Glib все строки всегда идут в utf-8. Буду разбираться.

dmitry_vk ★★★ ()
Ответ на: комментарий от RusNekromant

Определенно, мануал на Gtk+ врет в данном случае.

http://library.gnome.org/devel/glib/unstable/glib-Character-Set-Conversion.html#g-filename-to-utf8:

on Windows GLib uses UTF-8 for filenames

А на самом деле - там windows-1251. В общем, фикс будет, но не прямо сейчас, а завтра, наверное.

dmitry_vk ★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.