-
Viktor (17.02.14 22:40) [0]procedure TZakazFT.FormCreate(Sender: TObject);
var S: String;
begin
S:='абв';
ShowMessage('"'+S[1]+'"'); //показывает "?" а надо "а"
end;
lazarus 1.0.12 win7 x64 -
Viktor (17.02.14 22:44) [1]Какую функцию использовать?
-
В Lazarus все строковые константы - в UTF-8 (не UNICODE!)
String - скорее всего байтовый (но с похаченными функциями определения нужного размера)
А значит и [] получает доступ побайтово, а не посимвольно.
как посимвольно - надо гуглем поискать. -
NoUser © (17.03.14 21:58) [3]var S:String; // UTF8String;
begin
S:='абв';
ShowMessage ('\"'+UTF16ToUTF8( UTF8ToUTF16(S) [1] )+'\"');
end; -
Дмитрий К © (18.03.14 12:09) [4]S := UTF8Decode('абв');
-
> NoUser © (17.03.14 21:58) [3]
На сколько я понимаю - UTF16 тоже плавающее кол-во байт на символ имеет, т.е. это неудачный вариант, подходящий только в частном конкретном случае. -
NoUser © (21.03.14 18:00) [6]http://www.freepascal.ru/forum/viewtopic.php?f=5&t=9035
+
http://wiki.freepascal.org/LCL_Unicode_Support
=
поиск не-частного не-конкретного случая. ;)