Delphi и Unicode
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
Нужны наставления на путь истинный по сабжу. Что использовать: AnsitoUtf8 или StringToWideChar? Есть ли какие засады?
Utf8 - кодирование переменной длины: для ASCII символов - 1 байт, для остальных - до 3 байтов. Т.е. если заранее известно, что текст в основном состоит из ASCII-символов, то с т.з. экономии памяти Utf8 эффективнее. Для иероглифов, понятно, наоборот 

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

AiK, строковые свойства в dfm-файлах, задаваемые через Object Inspector, автоматически сохраняются в MBCS (UTF8 - один из вариантов MBCS), т.е. младшие ASCII символы - как есть, а остальные в multibyte. Обычные const строки в исходниках - зависит от типа: String - в ASCII, WideString - в Unicode. Ресурсные строки (resourcestring) - всегда в Unicode. Отсюда вывод: если нужно гарантировать, чтобы все строковые ресурсы задавались в Unicode, следует описывать их как resourcestring и подгружать в runtime для соотв. текстовых элементов интерфейса.
А MBCS чем не устраивает? IMHO это для ресурсов оптимальный формат - их же обычно посимвольно не надо разбирать (основное неудобство работы с multibyte strings).
А MBCS чем не устраивает? IMHO это для ресурсов оптимальный формат - их же обычно посимвольно не надо разбирать (основное неудобство работы с multibyte strings).
Видимо не правильно выразился. У меня нет никаких dfm. API приложение. И ресурсы ручками создаются. Вернее компилятся из rc файлов. Которые пишу не я...
Даже самый дурацкий замысел можно воплотить мастерски
Если мне память не изменяет, строковые ресурсы из rc всегда автоматически конвертируются в Unicode. Это можно легко проверить: добавить STRINGTABLE в rc и в нее какую-нибудь строчку типа 'Тестовая строка', скомпилить и поискать ее в exe-нике. Если нет - все OK 
