Notes |
|
(0016669)
|
zed
|
30-10-2015 14:31
|
|
Не нравится мне этот BOM. Он может и удобен с точки зрения доработки SAS, но вот в использовании он не удобен. Что мешает добавить ключ --utf8 при передаче параметров? Тем более, что это же влияет и на обработку параметров командной строки. Или там предлагаешь оставить ansi? |
|
|
|
В юникодной версии параметры командной строки и так уже юникодные, или я не прав?
Можно и ключ добавить. Я как-то не догадался. Это будет удобнее. |
|
|
(0016685)
|
zed
|
02-11-2015 14:58
|
|
Добавил ключ и сделал обработку сообщений в UTF-8. |
|
|
|
Не, обработку этого ключа нужно делать на уровне TCmdLineArgProcessor, а наружу выставить максимум перегрузку метода Process принимающую AnsiString |
|
|
(0016696)
|
zed
|
03-11-2015 10:09
|
|
Не, тот парсер работает со строками, так что там не получится. Конвертировать нужно до него. Я конечно могу перегрузить метод Process и написать там точно тот же код, что и сейчас в Main, только сути это особо не изменит.
Согласен, что простой Pos я зря заюзал, надо более аккуратно искать ключик в строке, например адаптировать FindCmdLineSwitch для ансишных строк или взять её из Alcinoe, если оно там есть. |
|
|
|
А что мешает. Utf-8 прекрасно без потерь конвертируется в строку. Скармливаем все что пришло парсеру. Проверяем ключ utf-8. Если он есть, то все ключи в которых могут быть юникодные символы (названия меток, имена файлов) перед использованием прогоняем через декодер utf-8.
Опять же вся логика прячется в парсере и не отсвечивает наружу. |
|
|
(0016702)
|
zed
|
03-11-2015 10:57
|
|
>Utf-8 прекрасно без потерь конвертируется в строку.
Точно? Это всё же перекодировка и она будет использовать текущую локаль. |
|
|
|
>>Utf-8 прекрасно без потерь конвертируется в строку.
>Точно? Это всё же перекодировка и она будет использовать текущую локаль.
Не точно, нужно проверить. Но даже если нет, то для этого можно сделать перегруженную версию Process для AnsiString и там преобразовывать без потерь. |
|
|
(0016704)
|
zed
|
03-11-2015 11:03
|
|
>и там преобразовывать без потерь
Как? |
|
|
|
>>и там преобразовывать без потерь
>Как?
Ладно, нужно подумать, но в любом случае это не в главной форме надо делать, а где-то уже в парсере. |
|
|
|
А, понял. Преобразование AnsiString -> WideString -> AnsiString должно быть тождественным для любой строки. Utf-8 ничуть не хуже любой другой. |
|
|
|
Так что просто конвертим в String, обрабатываем как нам нравится. Если нужно получить строку с возможным наличием юникода и взведен флаг Utf-8, то конвертим в AnsiString и вызываем UTF8DEcode |
|
|
|
Теперь будет проблема с символами не из основной локали при передаче их параметрами в юникодную версию через командную строку |
|
|
(0016715)
|
zed
|
03-11-2015 19:41
|
|
Нет, параметры командной строки обрабатываются перегруженной функцией. |
|
|
|
|