:: Visual Foxpro, Foxpro for DOS
вставить utf-8 в форму
Артём
Автор

Сообщений: 117
Дата регистрации: 23.04.2001
Идея такая. Скопировать текст из интернета. и вставить в форму в editBox. потом нажать кнопку и разобрать вставленное.
Я умею создать руками текстовый файл (через блокнот), вставить в него из буфера и потом все разобрать.
использую такую строку
STRCONV(STRCONV( text_utf8, 11), 2)

Проблема в том, что при вставке в мемо поле происходит порча того, что вставляется. во первых, ничего не читается, во вторых,
STRCONV(STRCONV( editBox.text, 11), 2)
уже не делает ничего хорошего



Исправлено 1 раз(а). Последнее : Артём, 08.12.21 10:08
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
ssa

Сообщений: 13008
Откуда: Москва
Дата регистрации: 23.03.2005
Артём
Проблема в том, что при вставке в мемо поле происходит порча того, что вставляется.
Ибо поле такого типа рассчитано на текст, а не на набор байтов. Для двоичных данных есть другие типы. Почитайте про Nocptrans.

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Taran

Сообщений: 13626
Откуда: Красноярск
Дата регистрации: 16.01.2008
Вероятно поможет если вставлять не напрямую в поле ввода, а через кнопку, в которой и прописать .parent.editbox.value=strco(_cliptext.....
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Скопировать текст из интернета. и вставить в форму в editBox. потом нажать кнопку и разобрать вставленное.
Лично я не понял до конца ни что и как вы делаете ("скопировать" - это скопировать руками или прочитать программно?), ни что вы при этом получаете, ни что вы хотите получить.
Слова "разобрать вставленное" тоже, думаю, понятны только вам.

Я, например, регулярно что-то копирую - руками - со страниц интернета, большинство страниц имеют именно такую кодировку, но никаких проблем со вставкой содержимого буфера обмена (Ctrl-V) в текстовые или эдитбоксы у меня нет.

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

Можете привести конкретный пример последовательности ваших действий, пример "копируемого", что получается в эдитбоксе сейчас, а что вы хотите там видеть в итоге.
--------

STRCONV(STRCONV( text_utf8, 11), 2)
Никогда не пользовался STRCONV(*, 2) - не верю, что это что-нибудь даёт.
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
utf-8 это вариант кодирования unicode (он так и расшифровывается - Unicode Transformation Format, 8-bit). Фоксовые визуальные элементы не работают с unicode - ни вставить туда такой текст без потерь (без преобразования к той или иной однобайтной кодировке), ни отобразить не получится никак.

Можно использовать какие-либо сторонние ActiveX компоненты, и тогда уже вполне можно будет получить unicode байтики хоть в utf-8, хоть в UTF-16LE, который в документации фокса для strconv называют UNICODE (wide characters).
Если забыть про визуальные элементы, то данные из буфера обмена вполне можно прочитать и в unicode - но для этого нужно использовать WinAPI функции, т.к. _CLIPTEXT тоже работает лишь с текстом конвертированным в однобайтную кодировку "текущей кодовой страницы". При том он ещё и страдает от особенностей винды связанной с "синтетическими" форматами (Synthesized Clipboard Formats) - когда преобразование текста из Unicode в однобайтную кодировку зависит от раскладки клавиатуры в момент копирования текста, и тому подобным неочевидным вещам.

akvvohinc
Никогда не пользовался STRCONV(*, 2) - не верю, что это что-нибудь даёт
Это для некоторых азиатских языков, когда ещё не было unicode, но компьютеры у них уже были, и в 256 возможных значений их алфавит ну никак не помещался. Для работы этой балалайки была нужна специальная "восточная" версия винды. Как оно эмулируется в более свежих версиях винды, где появилась возможность "локализации", и когда уже внутренне там юникод стал использоваться, я не в курсе... В общем если речь не идёт о японском, корейском, китайском языках и антикварных системах не умеющих в Unicode, то можно про DBCS забыть.
en.wikipedia.org


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Артём
Автор

Сообщений: 117
Дата регистрации: 23.04.2001
Igor Korolyov
При том он ещё и страдает от особенностей винды связанной с "синтетическими" форматами (Synthesized Clipboard Formats) - когда преобразование текста из Unicode в однобайтную кодировку зависит от раскладки клавиатуры в момент копирования текста, и тому подобным неочевидным вещам.

О! Спасибо. При включенной русской раскладке все копируется. При английской визуально много символов заменяется на знаки вопроса.

Еще , в процессе, был вариант вызывать
! %windir%\system32\notepad.exe
с параметром - именем нового файла. дальше (ctrl+V) и сохранить. потом программно разбирать файл



Исправлено 2 раз(а). Последнее : Артём, 09.12.21 07:42
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Артём
Автор

Сообщений: 117
Дата регистрации: 23.04.2001
akvvohinc
Можете привести конкретный пример последовательности ваших действий, пример "копируемого", что получается в эдитбоксе сейчас, а что вы хотите там видеть в итоге.
последовательность такая : руками
ctrl-c в интернете
ctrl-v в editBox
Цель такого копирования - визуально проконтролировать правильность скопированных данных и передать в мою программу данные для дальнейшей обработки.
Далее текст из EditBox программно обрабатывается. никаких проблем с обработкой правильного текста нет.
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
При включенной русской раскладке все копируется.

Ну, я бы не сказал, что ВСЁ, но русские и латинские буквы, конечно, искажаться (как немецкие с умляутами) или превращаться в "вопросы" (как со всеми греческими), у вас не должны.

Но остался вопрос - в каком месте вашего копирования вы используете STRCONV(*, 11)?
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Если речь идёт только про русский язык (ну и английский, само собой) то юникод не нужен. Для обхода проблемы с paste строк "с потерями" можно соорудить кнопку рядом с этим editbox и получать данные из буфера обмена програмно (используя WinAPI функции) - получать как раз в Unicode и потом уже конвертировать в однобайтовую 1251 кодировку при помощи strconv(..., 6, 1251, 1). Впрочем, для фокса вполне можно обойтись тем что научить пользователя переключаться на русский язык перед копированием текста из браузера или там из ворда/экселя. Тогда по сути вообще ничего не нужно делать

utf8 в буфер обмена практически никогда не попадёт (а попав - например если его с неправильно отобразившейся веб-страницы скопировать в этом вот нечитаемом виде - запросто исказиться по тем же самым причинам, по которым искажается и "читаемый" код скопированный при английской раскладке - и после такого он уже будет испорчен навсегда), и потому strconv(..., 11) тут не нужен. Это пригодиться если вдруг текстовый файл какой разобрать надо, или низкоуровневый результат HTTP запроса (да и то, если заранее известно что пришедшие данные именно в utf8 кодировке)...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Igor Korolyov
для фокса вполне можно обойтись тем что научить пользователя переключаться на русский язык перед копированием текста из браузера или там из ворда/экселя.

Дык эта. Наверное, можно присобачить принудительный переход на кириллицу перед началом копирования. А потом вернуть на ту раскладку, которая была до выполнения копирования.



Исправлено 1 раз(а). Последнее : Simple777, 09.12.21 21:49
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Как же ты собрался понимать что юзер собирается что-то скопировать неизвестно где
Да и произвольные переключения раскладки это жесть - за такое бить по рукам надо выдумщиков. Это как вирус, который при нажатии точки или запятой посылает нажатия кнопок "б", "л" и "я"

Если юзеру разъяснить причину проблемы, то он обычно сам справляется с её обходом - увидел что буковки пропали, снова пошёл туда же и уже "правильно" скопировал - т.к. знает в чём дело.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Simple777

Сообщений: 33855
Дата регистрации: 05.11.2006
Ну нет так нет.
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
akvvohinc

Сообщений: 4224
Откуда: Москва
Дата регистрации: 11.11.2008
Igor Korolyov
Впрочем, для фокса вполне можно обойтись тем что научить пользователя переключаться на русский язык перед копированием текста из браузера или там из ворда/экселя. Тогда по сути вообще ничего не нужно делать

Я думаю, всё наоборот.
Мне не требуется переключать язык, если я копирую из браузера в Фокс.
Например, вот сайт в кодировке utf-8:
www.flashscore.ru.com

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



Исправлено 1 раз(а). Последнее : akvvohinc, 10.12.21 00:45
Ratings: 0 negative/0 positive
Re: вставить utf-8 в форму
Артём
Автор

Сообщений: 117
Дата регистрации: 23.04.2001
akvvohinc
Цитата:
При включенной русской раскладке все копируется.
Но остался вопрос - в каком месте вашего копирования вы используете STRCONV(*, 11)?
еще не до конца все доделано. эта функция была найдена для цепочки преобразований русского текста из интернета в DOS. Сейчас эти функции закомментированы. Возможно, и не пригодятся.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 21 (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика