PDA

Просмотр полной версии : Delphi и Unicode



AiK
16.04.2004, 12:16
Нужны наставления на путь истинный по сабжу. Что использовать: AnsitoUtf8 или StringToWideChar? Есть ли какие засады?

Eugie
16.04.2004, 16:53
Utf8 - кодирование переменной длины: для ASCII символов - 1 байт, для остальных - до 3 байтов. Т.е. если заранее известно, что текст в основном состоит из ASCII-символов, то с т.з. экономии памяти Utf8 эффективнее. Для иероглифов, понятно, наоборот :)

AiK
16.04.2004, 17:06
Спасибо. Вопрос вдогонку: как задёшево из ресурсов ASCII символы перегнать в Unicode. Например те же пункты меню?
Если нужно писать прямо в ресурсах в Unicode, то какой редактор использовать? IDE чур не предлагать, ибо ресурсами совсем не программист занимается :).

Eugie
17.04.2004, 15:41
AiK, строковые свойства в dfm-файлах, задаваемые через Object Inspector, автоматически сохраняются в MBCS (UTF8 - один из вариантов MBCS), т.е. младшие ASCII символы - как есть, а остальные в multibyte. Обычные const строки в исходниках - зависит от типа: String - в ASCII, WideString - в Unicode. Ресурсные строки (resourcestring) - всегда в Unicode. Отсюда вывод: если нужно гарантировать, чтобы все строковые ресурсы задавались в Unicode, следует описывать их как resourcestring и подгружать в runtime для соотв. текстовых элементов интерфейса.

А MBCS чем не устраивает? IMHO это для ресурсов оптимальный формат - их же обычно посимвольно не надо разбирать (основное неудобство работы с multibyte strings).

AiK
17.04.2004, 15:45
Видимо не правильно выразился. У меня нет никаких dfm. API приложение. И ресурсы ручками создаются. Вернее компилятся из rc файлов. Которые пишу не я...

Eugie
17.04.2004, 16:03
Если мне память не изменяет, строковые ресурсы из rc всегда автоматически конвертируются в Unicode. Это можно легко проверить: добавить STRINGTABLE в rc и в нее какую-нибудь строчку типа 'Тестовая строка', скомпилить и поискать ее в exe-нике. Если нет - все OK :)