При приведении строки к типу UTF8String ошибки возникают после символьных констант.
В скрипте приведена часть возможных ошибок, причем наличие/отсутствие ошибки связано с размером константы (один или более символов)
и её местом (начало и внутри строки).
Средство от ошибок - явное приведение типа константы функцией UTF8Encode().
Переменная sTest: описание - "Описание переменной", единица измерения - "Единица измерения", начальное значение - "Это строка".
begin
// в примере строка приводится к типу UTF8String выводимый текст
// строка начинается с односимвольной константы
Text1.Text := 'Ё' + sTest.Description; // ЁРћРїРёСЃР°РЅРёРµ переменной
// строка начинается с многосимвольной константы
Text2.Text := 'ЁЁЁ' + sTest.Description; // ЁЁЁОписание переменной
// ЯВНОЕ ПРИВЕДЕНИЕ ТИПА
Text3.Text := UTF8Encode('Ё') + sTest.Description; // ЁОписание переменной
// константа завершает строку типа String
Text4.Text := sTest.AsStr + ' Кракозябра'; // Это строка Кракозябра
// односимвольная константа внутри строки
Text5.Text := sTest.Description + '%' + sTest.Units; // Описание переменной%Единица измерения
// многосимвольная константа внутри строки
Text6.Text := sTest.Description + '% ]' + sTest.Units; // Описание переменной% ]Единица измерения
// переменная как String
Text7.Text := sTest.Description + ' = ' + sTest.AsStr; // Описание переменной = Это строка
// переменная как UTF8string
Text8.Text := sTest.Description + ' = ' + sTest.AsUTF8String; // Описание переменной = Рто строка
end.
Помогите, пожалуйста, сориентироваться в кодировках.
С текстового файла считываю строки вида
ФАМИЛИЯ ИМЯ ОТЧЕСТВО
ФАМИЛИЯ ИМЯ ОТЧЕСТВО
...
ФАМИЛИЯ ИМЯ ОТЧЕСТВО
моя задача - сделать из каждой строки файла строку 'Фамилия И. О.' и добавить ее в комбобокс (это парсинг предоставляемого файла строк с именами персонала).циклически прохожусь по строкам, делю каждую на слова и заношу их во временный tempStringList:
Написал скрипт, который капитализирует (делает большой только первую букву) слово, но в том месте, где у меня UTF8LowerCase - проблемы с кодировкой.
for j := 2 to tempStringList[0].Length do buffer := buffer + tempStringList[0][j]; // составляем буфер из первой строки списка начиная со второй буквы - АМИЛИЯ
buffer := tempStringList[0][1] + UTF8LowerCase(buffer); // составляем буфер из первой буквы этой строки и имеющегося буфера в нижнем регистре - Ф + амилия - Фамилия
for j := 1 to tempStringList.Count - 1 do
buffer := buffer + ' ' + tempStringList[j][1] + '.'; // дополняем буфер инициалами - Фамилия + И. + О. - Фамилия И. О.
ComboBox.AddItem(buffer); // переносим буфер в комбобокс
(https://i.ibb.co/sgbG2sD/image.png)
Здравствуйте.
Необходимо явно указать преобразования типов.buffer := tempStringList[0][1] + UTF8ToString(UTF8LowerCase(UTF8Encode(buffer))); // составляем буфер из первой буквы этой строки и имеющегося буфера в нижнем регистре - Ф + амилия - Фамилия
P.S. Цикл удаления 1-го символа фамилии можно заменить функцией UTF8Copybuffer := tempStringList[0][1] + UTF8ToString(UTF8LowerCase(UTF8Copy(UTF8Encode(tempStringList[0]), 2, tempStringList[0].Length - 1))); // Фамилия