Troublemaker писал(а):как именно работает strings.LoadFromFile, в какой кодировке идет чтение запись.
Данный метод не занимается преобразование кодировок, а просто загружает текст потоком....
Модератор: Модераторы
Troublemaker писал(а):как именно работает strings.LoadFromFile, в какой кодировке идет чтение запись.
Odyssey писал(а):Здесь поможет консоль, достаточно создать маленький отладочный модуль с функцией типа Utf8DbgOut(const aMessage: string) которая будет перекодировать строку из utf-8 (а под windows еще и делать CharToOEM) и выводить сообщение в консоль. При желании можно элементарно переключиться на ведение лог-файла отладки. При создании релиза этот модуль убирается из uses, и забытые отладочные вызовы подсвечиваются как ошибки, что помогает от них избавиться.
Mr.Smart писал(а):просто загружает текст потоком...
Troublemaker писал(а):Mr.Smart писал(а):просто загружает текст потоком...
Виноват, неточно выразился. Как работает с кодировками .values()? В каком виде ему нужно подсовывать название параметра, если оно не латиницей?
var
list: TStringList;
s: String;
begin
...
s:=list.Values['Имя'];
...
end;
s:=SysToUTF8(list.Values[UTF8ToSys('Имя')];
CollAuthorEdit.Text:=Dates.LastModified.Who.FIO;
CollAuthorRankEdit.Text:=Dates.LastModified.Who.Rank;
function TControl.GetText: TCaption;
var
len: Integer;
begin
// Check if GetTextBuf is overridden, otherwise
// we can call RealGetText directly
[b] if TMethod(@Self.GetTextBuf).Code = Pointer(@TControl.GetTextBuf)[/b]
T_Desc.Text=string[51];
...
...rank:T_Desc.text;
CollAuthorRankEdit.Text:=Dates.LastModified.Who.Rank;
Troublemaker писал(а):...как я понимаю, по дефолту string=widestring в .26...
Troublemaker писал(а):Очередная бяка: где сообщения об ошибках?
Mr.Smart писал(а):Нет AnsiString в кодировке UTF-8
Mr.Smart писал(а):текст ошибки в своём составе имеет кириллицу
Troublemaker писал(а):Есть идеи, где это можно поправить?
Максим писал(а):Язык интерфейса.
Максим писал(а):Является ли сообщение системным
Максим писал(а):Версия Lazarus (думаю, что 0.9.26)
Troublemaker писал(а):Вопрос в том, КАКОЕ там должно быть сообщение, и где проверить, как оно хранится?
Максим писал(а):Если сообщение системное и язык интерфейса русский, то переключите интерфейс на английский язык, воспроизведите ситуацию, и приведите скриншот сообщения (сообщение должно быть на английском языке и, по идее, отображаться корректно). Возможно, что имеется ошибка в русском переводе.
Максим писал(а):переключите интерфейс на английский язык, воспроизведите ситуацию, и приведите скриншот сообщения (сообщение должно быть на английском языке и, по идее, отображаться корректно).
Troublemaker писал(а):Mr.Smart писал(а):Нет AnsiString в кодировке UTF-8
То есть, мало преобразовать в юникод, еще и длину надо увеличить вдвое, да?
Troublemaker писал(а):Есть идеи, где это можно поправить?
...
ECode := GetLastOSError;
If (ECode<>0) then
E:=EOSError.CreateFmt(SOSError, [ECode, SysErrorMessage(ECode)])
else
E:=EOSError.Create(SUnkOSError);
E.ErrorCode:=ECode;
Raise E;
....
Mr.Smart писал(а):Если это сообщение системное и операционка у вас локализована то сообщение естественно будет на русском языке.
Troublemaker писал(а):Mr.Smart писал(а):Если это сообщение системное и операционка у вас локализована то сообщение естественно будет на русском языке.
Дык, эта... я ж не знаю, ЧТО это за сообщение. КОгда я сказал "да, системное", вероятно, неправильно выразился, имелось в виду, что не мой код выдает это сообщение.
...
try
// Код с эксцепшеном
except
on e: Exception do
ShowMessage(AnsiToUTF8(e.Message));
end;
...
Mr.Smart писал(а):отлови ексцепшен и посмотри
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52