View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002883SAS.Планета[All Projects] Хотелкаpublic30-10-2015 14:1504-11-2015 08:50
Reportervdemidov 
Assigned Tozed 
PrioritynormalSeverityminorReproducibilityalways
StatusresolvedResolutionfixed 
PlatformOSOS Version
Product Version151010 
Target Version151111Fixed in Version151111 
Summary0002883: Проблемы с юникодом при обработке событий WMCopyData
DescriptionСейчас данные переданные через WMCopyData трактуются как AnsiString. Но там могут быть имена файлов для импорта, а также имя и описание метки для вставки в базу. А это совсем не обязательно AnsiString. Предлагаю при получении проверять BOM так же как и при открытии текстовых файлов.
Tagsюникод
Attached Files

- Relationships
child of 0002166resolvedzed Переход на версию Delphi с полной поддержкой юникода 

-  Notes
(0016669)
zed (manager)
30-10-2015 14:31

Не нравится мне этот BOM. Он может и удобен с точки зрения доработки SAS, но вот в использовании он не удобен. Что мешает добавить ключ --utf8 при передаче параметров? Тем более, что это же влияет и на обработку параметров командной строки. Или там предлагаешь оставить ansi?
(0016670)
vdemidov (manager)
30-10-2015 14:34

В юникодной версии параметры командной строки и так уже юникодные, или я не прав?
Можно и ключ добавить. Я как-то не догадался. Это будет удобнее.
(0016685)
zed (manager)
02-11-2015 14:58

Добавил ключ и сделал обработку сообщений в UTF-8.
(0016694)
vdemidov (manager)
03-11-2015 08:51

Не, обработку этого ключа нужно делать на уровне TCmdLineArgProcessor, а наружу выставить максимум перегрузку метода Process принимающую AnsiString
(0016696)
zed (manager)
03-11-2015 10:09

Не, тот парсер работает со строками, так что там не получится. Конвертировать нужно до него. Я конечно могу перегрузить метод Process и написать там точно тот же код, что и сейчас в Main, только сути это особо не изменит.

Согласен, что простой Pos я зря заюзал, надо более аккуратно искать ключик в строке, например адаптировать FindCmdLineSwitch для ансишных строк или взять её из Alcinoe, если оно там есть.
(0016700)
vdemidov (manager)
03-11-2015 10:52

А что мешает. Utf-8 прекрасно без потерь конвертируется в строку. Скармливаем все что пришло парсеру. Проверяем ключ utf-8. Если он есть, то все ключи в которых могут быть юникодные символы (названия меток, имена файлов) перед использованием прогоняем через декодер utf-8.
Опять же вся логика прячется в парсере и не отсвечивает наружу.
(0016702)
zed (manager)
03-11-2015 10:57

>Utf-8 прекрасно без потерь конвертируется в строку.
Точно? Это всё же перекодировка и она будет использовать текущую локаль.
(0016703)
vdemidov (manager)
03-11-2015 11:01

>>Utf-8 прекрасно без потерь конвертируется в строку.
>Точно? Это всё же перекодировка и она будет использовать текущую локаль.
Не точно, нужно проверить. Но даже если нет, то для этого можно сделать перегруженную версию Process для AnsiString и там преобразовывать без потерь.
(0016704)
zed (manager)
03-11-2015 11:03

>и там преобразовывать без потерь
Как?
(0016705)
vdemidov (manager)
03-11-2015 11:12

>>и там преобразовывать без потерь
>Как?
Ладно, нужно подумать, но в любом случае это не в главной форме надо делать, а где-то уже в парсере.
(0016706)
vdemidov (manager)
03-11-2015 11:14

А, понял. Преобразование AnsiString -> WideString -> AnsiString должно быть тождественным для любой строки. Utf-8 ничуть не хуже любой другой.
(0016707)
vdemidov (manager)
03-11-2015 11:16

Так что просто конвертим в String, обрабатываем как нам нравится. Если нужно получить строку с возможным наличием юникода и взведен флаг Utf-8, то конвертим в AnsiString и вызываем UTF8DEcode
(0016714)
vdemidov (manager)
03-11-2015 19:39

Теперь будет проблема с символами не из основной локали при передаче их параметрами в юникодную версию через командную строку
(0016715)
zed (manager)
03-11-2015 19:41

Нет, параметры командной строки обрабатываются перегруженной функцией.
(0016716)
vdemidov (manager)
03-11-2015 19:47

Ой. Точно. Прогнал.

- Users who viewed this issue
User List Anonymous (1889x), vdemidov (36x), zed (20x)
Total Views 1945
Last View 09-04-2020 16:31

- Issue History
Date Modified Username Field Change
30-10-2015 14:15 vdemidov New Issue
30-10-2015 14:16 vdemidov Status new => confirmed
30-10-2015 14:16 vdemidov Tag Attached: юникод
30-10-2015 14:18 vdemidov Relationship added child of 0002166
30-10-2015 14:31 zed Note Added: 0016669
30-10-2015 14:34 vdemidov Note Added: 0016670
02-11-2015 14:58 zed Note Added: 0016685
02-11-2015 14:58 zed Status confirmed => resolved
02-11-2015 14:58 zed Fixed in Version => 151111
02-11-2015 14:58 zed Resolution open => fixed
02-11-2015 14:58 zed Assigned To => zed
03-11-2015 08:51 vdemidov Note Added: 0016694
03-11-2015 08:51 vdemidov Assigned To zed =>
03-11-2015 08:51 vdemidov Status resolved => confirmed
03-11-2015 08:55 vdemidov Resolution fixed => reopened
03-11-2015 10:09 zed Note Added: 0016696
03-11-2015 10:52 vdemidov Note Added: 0016700
03-11-2015 10:57 zed Note Added: 0016702
03-11-2015 11:01 vdemidov Note Added: 0016703
03-11-2015 11:03 zed Note Added: 0016704
03-11-2015 11:12 vdemidov Note Added: 0016705
03-11-2015 11:14 vdemidov Note Added: 0016706
03-11-2015 11:16 vdemidov Note Added: 0016707
03-11-2015 19:39 vdemidov Note Added: 0016714
03-11-2015 19:41 zed Note Added: 0016715
03-11-2015 19:47 vdemidov Note Added: 0016716
04-11-2015 08:50 vdemidov Status confirmed => resolved
04-11-2015 08:50 vdemidov Resolution reopened => fixed
04-11-2015 08:50 vdemidov Assigned To => zed



Copyright © 2007 - 2020 SAS.Planet Team