Здесь я нашел похожие темы, но ни один из них не смог решить мой вопрос, поэтому я прошу об этом в новом потоке.Преобразование AnsiString в UnicodeString в Lazarus с FreePascal
Пару дней назад я изменил формат, в котором сохраняются настройки приложения, которое я разрабатываю, от INI до JSON.
Для этого я использую блок jsonConf.
Образец кода, который я использую для сохранения пары ключ-значение в файле, будет выглядеть следующим образом.
Procedure TMyClass.SaveSettings();
var
c: TJSONConfig;
begin
c:= TJSONConfig.Create(nil);
try
c.Filename:= m_settingsFilePath;
c.SetValue('/Systems/CustomName', m_customName);
finally
c.Free;
end;
end;
В моем коде m_customName является переменной типа AnsiString. Процедура TJSONConfig.SetValue требует, чтобы ключ и значение имели тип UnicodeString. Приложение прекрасно компилируется, но я получаю предупреждения такие
Warning: Implicit strung type conversion from "AnsiString" to "UnicodeString".
Некоторые сообщения предупреждают, что существует потенциальная потеря данных.
Конечно, я могу пойти и изменить все на UnicodeString, но это слишком рискованно. Пока я не видел никаких проблем, игнорируя эти предупреждения, но они все время появляются, и это может вызвать проблемы на другом ПК.
Как исправить это?
Почему бы вам просто не использовать 'string' везде? –
Тогда он будет жаловаться «Предупреждение: Неявное преобразование типа строки из« ShortString »в« UnicodeString ». –
Почему 'string' является псевдонимом' ShortString'? Я не понимаю, почему вы хотите использовать «ShortString» и «AnsiString». –