View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0002883 | SAS.Планета | Хотелка / Feature request | public | 30-10-2015 14:15 | 04-11-2015 08:50 |
| Reporter | vdemidov | Assigned To | zed | ||
| Priority | normal | Severity | minor | Reproducibility | always |
| Status | resolved | Resolution | fixed | ||
| Product Version | 151010 | ||||
| Target Version | 151111 | Fixed in Version | 151111 | ||
| Summary | 0002883: Проблемы с юникодом при обработке событий WMCopyData | ||||
| Description | Сейчас данные переданные через WMCopyData трактуются как AnsiString. Но там могут быть имена файлов для импорта, а также имя и описание метки для вставки в базу. А это совсем не обязательно AnsiString. Предлагаю при получении проверять BOM так же как и при открытии текстовых файлов. | ||||
| Tags | юникод | ||||
|
|
Не нравится мне этот BOM. Он может и удобен с точки зрения доработки SAS, но вот в использовании он не удобен. Что мешает добавить ключ --utf8 при передаче параметров? Тем более, что это же влияет и на обработку параметров командной строки. Или там предлагаешь оставить ansi? |
|
|
В юникодной версии параметры командной строки и так уже юникодные, или я не прав? Можно и ключ добавить. Я как-то не догадался. Это будет удобнее. |
|
|
Добавил ключ и сделал обработку сообщений в UTF-8. |
|
|
Не, обработку этого ключа нужно делать на уровне TCmdLineArgProcessor, а наружу выставить максимум перегрузку метода Process принимающую AnsiString |
|
|
Не, тот парсер работает со строками, так что там не получится. Конвертировать нужно до него. Я конечно могу перегрузить метод Process и написать там точно тот же код, что и сейчас в Main, только сути это особо не изменит. Согласен, что простой Pos я зря заюзал, надо более аккуратно искать ключик в строке, например адаптировать FindCmdLineSwitch для ансишных строк или взять её из Alcinoe, если оно там есть. |
|
|
А что мешает. Utf-8 прекрасно без потерь конвертируется в строку. Скармливаем все что пришло парсеру. Проверяем ключ utf-8. Если он есть, то все ключи в которых могут быть юникодные символы (названия меток, имена файлов) перед использованием прогоняем через декодер utf-8. Опять же вся логика прячется в парсере и не отсвечивает наружу. |
|
|
>Utf-8 прекрасно без потерь конвертируется в строку. Точно? Это всё же перекодировка и она будет использовать текущую локаль. |
|
|
>>Utf-8 прекрасно без потерь конвертируется в строку. >Точно? Это всё же перекодировка и она будет использовать текущую локаль. Не точно, нужно проверить. Но даже если нет, то для этого можно сделать перегруженную версию Process для AnsiString и там преобразовывать без потерь. |
|
|
>и там преобразовывать без потерь Как? |
|
|
>>и там преобразовывать без потерь >Как? Ладно, нужно подумать, но в любом случае это не в главной форме надо делать, а где-то уже в парсере. |
|
|
А, понял. Преобразование AnsiString -> WideString -> AnsiString должно быть тождественным для любой строки. Utf-8 ничуть не хуже любой другой. |
|
|
Так что просто конвертим в String, обрабатываем как нам нравится. Если нужно получить строку с возможным наличием юникода и взведен флаг Utf-8, то конвертим в AnsiString и вызываем UTF8DEcode |
|
|
Теперь будет проблема с символами не из основной локали при передаче их параметрами в юникодную версию через командную строку |
|
|
Нет, параметры командной строки обрабатываются перегруженной функцией. |
|
|
Ой. Точно. Прогнал. |
| 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 |
| 08-08-2025 13:24 | zed | Category | Хотелка => Хотелка / Feature request |