Опять русские буквы...
Модератор: Модераторы
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Опять русские буквы...
Приветствую... В общем, в очередной раз проблема с русскими буквами - Lazarus (0.9.20) в Линуксе (OpenSUSE10.2) не выводит русских букв из Firebird базы... Равно как и Fenix-sql... Кодировку cp1251 хотелось бы оставить - приложению еще и в винде работать.. Да и вообще, в редакторе не получается написать что-нибудь по-русски...
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
alexs писал(а):Если GTK2 - то у тебя вывод должен идти в utf8 - я не знаю - FBLib умеет на лету перекодироватьиз Win1251 в UTF8 и обратно? (скорее всего нет) т.е. ты сам должен осуществить эту перекодировку
у меня аналогичная проблема - приходится пока оставаться на GTK1 из-за этого
Т.е. под GTK2 возможна работа только в локали UTF8?
Win1251 не работает?
А то я маюсь, пытаюсь заставить работать...
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Хм... колдунство, но пересобрав Лазарус в GTK2 (до этого этот самый GTK второй был установлен, про это и отвечал), CHAR'ы и VARCHAR'ы из базы стали читаться нормально
Правда меню Lazarus'а стало "????", но это неважно - перевел в англицкий, так даже привычней
А важно, что из blob полей все-равно вопросы вылезают
Можно как-нибудь сделать так, чтоб если Linux - перекодировать, если Windows - оставлять как есть ?
[/img]
Brainenjii писал(а):Хм... колдунство, но пересобрав Лазарус в GTK2 (до этого этот самый GTK второй был установлен, про это и отвечал), CHAR'ы и VARCHAR'ы из базы стали читаться нормальноПравда меню Lazarus'а стало "????", но это неважно - перевел в англицкий, так даже привычней
А важно, что из blob полей все-равно вопросы вылезают
Можно как-нибудь сделать так, чтоб если Linux - перекодировать, если Windows - оставлять как есть ?
[/img]
Конкретно тебе помогут директивы компилятора:
{$IFDEF MSWINDOWS}
{$ENDIF MSWINDOWS}
{$IFDEF Linux}
{$ENDIF Linux}
"????" - это из за того, что текст в одной кодировке, прога работает в другой кодировке.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Спасибо
Вроде работает - в винде по-крайней мере все в порядке и после моих преобразований ^_^ А вот в Линуксе не совсем, хотя уже лучше
После этого глобального изменения знаки вопроса заменились на крякозябру
Т.е. ???????? ???????? стало Îñíîâíûå ñðåäñòâà... Как понимаю, теперь UTF8 надо преобразовать в koi8-r, или это как раз и есть то, что в GTK2 не работает ?
Код: Выделить всё
function TFBLDsql.BlobFieldAsString(const AFieldIdx: integer): string;
var
StringStream: TStringStream;
begin
Result := '';
StringStream := TStringStream.Create('');
try
BlobFieldSaveToStream(AFieldIdx, StringStream);
Result := StringStream.DataString;
// Добавил Я
{$IFDEF Linux}
Result := AnsiToUtf8(Result);
{$ENDIF Linux}
// Вот и все...
finally
StringStream.Free;
end;
end;После этого глобального изменения знаки вопроса заменились на крякозябру
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
Не, врят ли проблема в шрифтах... В том же гриде данные из той же БД, но в VARCHAR'ах - нормально отображаются... Почитал статью про русские буквы в Firebird на ibase.ru, там написано, что как раз строковые типы конвертируются автоматически, в отличии от Blob'ов... Так что, подозреваю, я просто неправильно перевожу с WIN1251 на UTF8... Точно, что AnsiToUTF - это из cp1251, а не из ДОС'a ?
И если нет, то как конвертнуть правильно ? 
