Столкнулся со следующей проблемой и из-за недостатка знаний не могу понять как ее решить, хочется чтоб Console реализация работала так же как и GUI реализация с UTF8.
Выглядит это так (для примера все упрощено).
Имеется текстовый JSON файл в UTF8 кодировке с которым я работаю
GUI реализация с одной кнопочкой на форме.
- Код: Выделить всё
unit umain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, fpjson, jsonparser, googlecalendar;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
var
s: TStringList;
j: TJSONData;
evt: TEvents;
begin
// читаю из файла
s := TStringList.Create;
s.LoadFromFile('../test.json');
// перевожу в JSON
j := GetJSON(s.Text);
FreeAndNil(s);
// создаю объект списка событий (класс из GoogleCalendar)
evt := TEvents.Create();
evt.LoadFromJSON(TJSONObject(j));
// Сохраняю в файл из GUI версии, сохраняется в UTF8
s := TStringList.Create;
s.Text := evt.items[0].summary;
s.SaveToFile('../res_gui.txt');
FreeAndNil(s);
end;
end.
Console реализация
- Код: Выделить всё
program uconsole;
{$mode objfpc}{$H+}
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes,
fpjson,
jsonparser,
SysUtils,
googlecalendar { you can add units after this };
var
s: TStringList;
j: TJSONData;
evt: TEvents;
begin
// читаю из файла
s := TStringList.Create;
s.LoadFromFile('../test.json');
// перевожу в JSON
j := GetJSON(s.Text);
FreeAndNil(s);
// создаю объект списка событий (из GoogleCalendar)
evt := TEvents.Create();
evt.LoadFromJSON(TJSONObject(j));
// Сохраняю в файл из Console версии сохраняется в Ansi
s := TStringList.Create;
s.Text := evt.items[0].summary;
s.SaveToFile('../res_console.txt');
FreeAndNil(s);
end.
Вопрос! Почему одна и та-же реализация из под GUI сохраняет значение, которое я получил у объекта evt, в UTF8, а консольная реализация выполняя тот же самый код получает его в Ansi?
Сохранение в файл показывает что в случае с GUI это UTF8 строка, а в случае с Console версией это Ansi строка.
Добавление в консольную реализацию {$Codepage UTF8} не помогает.
OS: Windows 7 SP1 RU. (под Linux не пробовал)
Lazarus: 1.8.4. SVN: 57972.
В архиве прикладываю исходники GUI и Console реализации с демо JSON файлом.
Спасибо.