Кодировка исходника UTF-8, так что с этой стороны проблем вроде бы быть не должно. А вот пример - да, неудачный я привёл, т.к. не видно где тут WideString. Реально там вот такой код:
- Код: Выделить всё
 procedure TWindow.SetText(Value: WideString);
begin
  gtk_window_set_title(PGtkWindow(FWindow), Pgchar(UTF8Encode(Value)));
end;
Window.SetText('Тест Œ');
Если функцию UTF8Encode исключить, то вместо одного нужного символа выводятся два левых (например, вместо Œ выводится R и квадратик). Что логично, т.к. WideString, насколько я понимаю, это UCS-2...
Пробовал также такой вариант:
- Код: Выделить всё
 Window.SetText('Тест ' + #338);
Результат аналогичный - заголовок не выводится вообще. И даже вот так пробовал:
- Код: Выделить всё
 var
  W: WideString;
  ...
  W := 'Тест ' + #338;
  Window.SetText(W);
То же самое. Когда аналогичный заголовок делаю в win32api-коде - заголовок выводится правильный. Да, забыл написать, что все эксперименты проводятся c Windows-версией GTK, а не в Linux'е.
Может, есть какие-то тонкости работы с юникодом в GTK? Может, я чего-то где-то не учитываю...