Unicode и буфер обмена

Обсуждение программ nnCron и nnCron LITE

Unicode и буфер обмена

Postby noob2k6 » Fri, 12 Jun 2009, 17:58

Сделал примитивный скрипт, немного расширяющий возможности буфера обмена, а именно позволяющий сохранять последние побывавшие в нем текстовые строки в отдельные файлы, чтобы потом по запросу поместить их обратно в клипборд. (Если кому-то интересно, могу выложить, но там нет ничего особенного - всю инфу для создания "удобняшки" почерпнул либо на этом форуме, либо из Справки к nnCron.)

Не могу самостоятельно решить одну проблему, которая заключается (если я правильно понял) в иногда некорректном распознавании неоднобайтной кодировки текста в буфере обмена - при копировании текста из некоторых программ вместо кириллических символов идут сплошные вопросительные знаки :(

Если же этот самый текстовый фрагмент вставить в стандартный Блокнот или другую программу, поддерживающую Unicode, то кириллица воспроизводится нормально.

Пытался смотреть исходники nnCron и искать дополнительную инфу в Сети, но так ни к чему не пришел...
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

Re: Unicode и буфер обмена

Postby AlikasS » Sat, 13 Jun 2009, 16:16

вроде известная проблема....
попробуй перед копированием буфера переключать раскладку на RUS
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Unicode и буфер обмена

Postby noob2k6 » Sat, 13 Jun 2009, 17:07

AlikasS wrote:попробуй перед копированием буфера переключать раскладку на RUS

Спасибо за совет, но, к сожалению, не помогает...

Если интересно, вот сам скрипт:
Code: Select all
# CLIPBOARD TEXT LOGGER & RETRIEVER >>>

#( CLASSIC-TASK-#-clipboard_logger
SingleInstance
WatchClipboard: "*"

14 CONSTANT clp-max \ any natural number :)
TRUE VALUE clipboard-logger-on?
CREATE ClipString 256 ALLOT
VARIABLE clp-num
: CLIPBOARD_LOG      S" C:\TMP\CLIPBOARD\Clipboard.log" S+ ;
: num>clp ( n -- a u ) 
   S" C:\TMP\CLIPBOARD\"  ROT  S>D <# # # #> S+  S" .clp" S+ ;

Action:
clipboard-logger-on? NOT IF EXIT THEN

CLIPBOARD_LOG 2DUP EXIST? IF 2DROP ELSE FCREATE THEN

25 4000 BEEP
100 PAUSE
CLIPBOARD 254 MIN 2DUP  ClipString COUNT  COMPARE 0=
IF  2DROP  ELSE
   ClipString PLACE
   crlf  ClipString COUNT S+ crlf S+ crlf S+ 
   CLIPBOARD_LOG FAPPEND   

   clp-num @ 1 +
   DUP clp-max >  IF  clp-max -  THEN
   clp-num !   
   CLIPBOARD  clp-num @ num>clp  FWRITE
THEN
)#

#( CLASSIC-TASK-#-clipboard_old_text_retriever
SingleInstance
WatchHotKey: ^+o  \ Ctrl + Shift + O

VARIABLE cotr-win
VARIABLE cotr-menu
777 CONSTANT COTR_CLEAR_ALL

: CotrMenu ( -- h )
   POPUPMENU
      clp-max 1+ 1 DO
         S" " \ text buffer!!!
         I num>clp 2DUP ( a-buf u1 a-file u2 a-file u2 ) EXIST?
         IF
            \ ( a-buf u1 a-file u2 ) \ S" " \ text buffer!!!
            \ 2SWAP   
            ( a-buf u1 a-file u2 ) READ-BY-LINE
               80 MIN S+ \ filling the buffer
               DUP 0= \ *** read until a nonzero-length string is found
               \ FALSE
            ;?READ-BY-LINE
         \ ELSE  ( a u ) 2DROP S" "  THEN
         ELSE  ( a-buf u1 a-file u2 ) 2DROP THEN
         I MENUITEM
         \ MENUSEPARATOR
      LOOP
      MENUSEPARATOR
      S" УДАЛИТЬ ВСЕ СОХРАНЕННЫЕ ТЕКСТОВЫЕ ФРАГМЕНТЫ" COTR_CLEAR_ALL MENUITEM
   END-MENU
;

: clear-all-clipboard-values ( -- )
   clp-max 1+ 1 DO
      I num>clp FDELETE
   LOOP
   0 clp-num !
;

Action:

WITH TrayIcon
   Z" static" 0 0 Window cotr-win !
ENDWITH

CotrMenu cotr-menu !
cotr-win @ SetForegroundWindow DROP
0 cotr-win @ MOUSE-POS SWAP 256 cotr-menu @ TrackPopupMenuEx

\ DUP . CR \ 2debug

( n ) ?DUP
IF
   ( n ) DUP COTR_CLEAR_ALL =
   IF
      ( n ) DROP clear-all-clipboard-values   
   ELSE
      ( n ) num>clp 2DUP EXIST?
      IF
         FALSE TO clipboard-logger-on?
         ( a u ) FILE CLIPBOARD! 
         200 PAUSE
         TRUE TO clipboard-logger-on?
      ELSE
         ( a u ) 2DROP
      THEN
   THEN
THEN

cotr-menu @ DestroyMenu DROP
)#

# CLIPBOARD TEXT LOGGER & RETRIEVER <<<

По идее, должен заработать сразу после подключения, если подключен плагин string_manipulation.spf (для READ-BY-LINE).
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

Re: Unicode и буфер обмена

Postby AlikasS » Sat, 13 Jun 2009, 17:18

а если ловить ctrl+C и переключать раскладку на рус
и повторно копировать фрагмент?
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Unicode и буфер обмена

Postby noob2k6 » Sat, 13 Jun 2009, 18:00

AlikasS wrote:а если ловить ctrl+C и переключать раскладку на рус
и повторно копировать фрагмент?

Не помогает, даже если предварительно вручную переключать раскладку на русский - пробовал, и не раз...

Всё дело в том, что некоторые программы, похоже, отдают текст в неправильной кодировке; кстати, программа CLCL (ее тут на форуме советовали) тоже в таких случаях показывает вопросительные знаки.

Могу ошибаться, но если верить стандартной виндозовской программе clipbrd.exe, в этом случае кодировка текста именно Unicode.
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

Re: Unicode и буфер обмена

Postby AlikasS » Sat, 13 Jun 2009, 18:08

noob2k6 wrote:
AlikasS wrote:а если ловить ctrl+C и переключать раскладку на рус
и повторно копировать фрагмент?

Не помогает, даже если предварительно вручную переключать раскладку на русский - пробовал, и не раз...

Всё дело в том, что некоторые программы, похоже, отдают текст в неправильной кодировке; кстати, программа CLCL (ее тут на форуме советовали) тоже в таких случаях показывает вопросительные знаки.

Могу ошибаться, но если верить стандартной виндозовской программе clipbrd.exe, в этом случае кодировка текста именно Unicode.

помоему это глюк винды уже решен в XP в SP3 (где-то видел сообщение, так что не уверен)
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Unicode и буфер обмена

Postby noob2k6 » Sat, 13 Jun 2009, 18:13

AlikasS wrote:помоему это глюк винды уже решен в XP в SP3

Спасибо за инфу, но даже если это действительно так, меня и SP2 пока устраивает. В общем, буду и дальше смотрить на вопросительные знаки :)
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

Re: Unicode и буфер обмена

Postby noob2k6 » Sat, 13 Jun 2009, 18:14

AlikasS wrote:помоему это глюк винды уже решен в XP в SP3

Спасибо за инфу, но даже если это действительно так, меня и SP2 пока устраивает. В общем, буду и дальше смотреть на вопросительные знаки :)
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

Re: Unicode и буфер обмена

Postby AlikasS » Sat, 13 Jun 2009, 18:29

домашную стабильную SP2 win то же трогать не буду (есть крякозябры)
а вот в ПНД на рабочем SP3, там проверю (да просит меня автор за использование на работе ;-),
ибо купить nncron собираюсь, но способы приемлемые для себя не найду )
User avatar
AlikasS
 
Posts: 1437
Joined: Wed, 28 Jun 2006, 05:39
Location: Khabarovsk

Re: Unicode и буфер обмена

Postby VoidVolker » Sat, 13 Jun 2009, 21:16

AlikasS wrote:да просит меня автор за использование на работе ;-),
ибо купить nncron собираюсь, но способы приемлемые для себя не найду

Как вариант, думаю, можно договориться на "бартер" - а именно, пойти в модераторы 8) .
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Unicode и буфер обмена

Postby noob2k6 » Sun, 14 Jun 2009, 11:31

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

Думаю, имеет смысл обратить внимание на 2 варианта решения проблемы с неверным распознаванием кодировки:

1) Принудительно захватывать текст из буфера обмена именно в кодировке Unicode и в случае выявления кракозябров и т.п. захватывать его оттуда повторно обычным способом.

2) Приспособить для этой цели уже имеющийся в других программах (скажем, в Блокноте) соответствующий код по распознаванию кодировки текста.

Пока что пытаюсь применять 3-й вариант с промежуточной вставкой любого копируемого текста в Блокнот с последующим копированием его оттуда; разумеется, это самый что ни на есть тупой подход "в лоб", но, как говорят англичане, beggars cannot be choosers :D
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

Re: Unicode и буфер обмена

Postby VoidVolker » Sun, 14 Jun 2009, 14:33

Вариант 4. Добавить поддержку юникода при работе с буфером обмена в ннкрон.
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Unicode и буфер обмена

Postby ascerdfg1 » Fri, 26 Jun 2009, 12:22

nncron.exe v 1.93b10 Build 1141
tm.exe v 1.93b10 Build 569
Windows XP (5.1.2600) SP3
Комп без nnCron - груда металла!
User avatar
ascerdfg1
 
Posts: 541
Joined: Thu, 29 Nov 2007, 02:45
Location: г. Алексин

Re: Unicode и буфер обмена

Postby VoidVolker » Fri, 26 Jun 2009, 18:45

Кстати да, замена кодовых страниц часто помогает решить проблемы отображения кириллицы в программах, возможно поможет и в этом случае:
Code: Select all
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage]
"1250"="c_1251.nls"
"1251"="c_1251.nls"
"1252"="c_1251.nls"
95% вопросов уже обсуждались на форуме или ответы на них есть в мануале.        nnCron 1.93 b15.exe
Как правильно задавать вопросы.
User avatar
VoidVolker
Site Admin
 
Posts: 2898
Joined: Tue, 25 Apr 2006, 17:56

Re: Unicode и буфер обмена

Postby noob2k6 » Sat, 27 Jun 2009, 11:32

ascerdfg1 wrote:здесь читал? http://forum.script-coding.info/viewtopic.php?id=791

Спасибо за ссылку. По странному совпадению на днях скачал AutoHotKey, причем собирался использовать его как раз для конвертации содержимого буфера обмена из Unicode в ANSI :)

VoidVolker wrote:Кстати да, замена кодовых страниц часто помогает решить проблемы отображения кириллицы в программах

Эта самая установка выставлена у меня в реестре как минимум пару лет, так что это точно не тот случай.

Повторяю, nnCron'овский CLIPBOARD иногда выдает не кракозябры, а именно вопросительные знаки (в буквальном смысле) на месте соответствующих русских букв. Кстати, тем же самым страдает программа CLCL (по-видимому, тоже из-за кривой поддержки Unicode).

Увы, разобраться со словом CLIPBOARD в исходниках мне не под силу. Придется, наверное, всё-таки AutoHotKey задействовать.
noob2k6
 
Posts: 123
Joined: Thu, 01 Jun 2006, 06:30

Next

Return to nnCron forum (Russian)

Who is online

Users browsing this forum: Google [Bot] and 2 guests

cron