我使用 Rad studio 11。我從 json 檔案中讀取資訊(檔案是 UTF8 編碼的)并轉換為 jsonobject。然后我對此 jsonobject 進行更改并希望保存到 json 檔案。資訊已成功寫入檔案,但檔案具有 Windows-1251 編碼。需要做什么才能使檔案編碼為UTF8?它需要我,因為 json 檔案包含俄語符號(在 Windows-1251 編碼中它看起來像“?”)。
我從這樣的檔案中讀取:
var inputfile:TextFile;
str:string;
...
if OpenDialog1.Execute then begin
AssignFile(inputfile, OpenDialog1.FileName);
reset(inputfile);
while not Eof(inputfile) do
begin
ReadLn(inputfile, str);
str1 := str1 UTF8ToANSI(str);
end;
closefile(inputfile);
end;
我像這樣轉換為 Jsonobject:
LJsonObj:=TJSONObject.ParseJSONValue(str1) as TJSONobject;
嘗試像這樣保存 JsonObject:
var
listStr: TStringList;
Size: Integer;
I: Integer;
...
Size := Form3.LJsonObj.Count;
liststr := TStringList.Create;
try
listStr.Add('{');
if Size > 0 then
listStr.Add(LJsonObj.Get(0).ToString);
showmessage(LJsonObj.Get(0).ToString);
for I := 1 to Size - 1 do
begin
listStr.Add(',');
listStr.Add(ANSITOUTF8(LJsonObj.Get(I).ToString));
end;
listStr.Add('}');
// Form1.filepath-is path of file,form1.filename-name of file without file extension
listStr.SaveToFile(Form1.filepath '\' form1.filename '.json');
finally
listStr.Free;
end;
uj5u.com熱心網友回復:
為什么要使用舊式 Pascal 檔案 I/O 讀取檔案?為什么要在 UTF-8 和ANSI之間轉換?您使用的是 Unicode 版本的 Delphi,您根本不應該處理 ANSI。
任何狀況之下:
讀取檔案時,請考慮使用
TStringList.LoadFromFile()orTFile.ReadAllText()代替。兩者都允許您指定 UTF-8 作為源編碼。寫入檔案時,請考慮使用
TStringList.SaveToFile()orTFile.WriteAllText()代替。兩者都允許您將 UTF-8 指定為目標編碼。
例如:
var
inputfile: TStringList;
str1: string;
...
begin
...
inputfile := TStringList.Create;
try
inputfile.LoadFromFile(OpenDialog1.FileName, TEncoding.UTF8);
str1 := inputfile.Text;
finally
inputfile.Free;
end;
...
end;
...
var
listStr: TStringList;
...
begin
...
listStr.SaveToFile(Form1.filepath '\' form1.filename '.json', TEncoding.UTF8);
...
end;
var
str1: string;
...
begin
...
str1 := TFile.ReadAllText(OpenDialog1.FileName, TEncoding.UTF8);
...
end;
...
var
listStr: TStringList;
...
begin
...
TFile.WriteAllText(listStr.Text, TEncoding.UTF8);
...
end;
請注意,您實際上并不需要使用 aTStringList來手動構建 JSON 語法。 TJSONObject有ToString()和ToJSON()方法來為你處理。但是,如果您真的想手動構建自己的 JSON 語法,請考慮使用TJSONObjectBuilderorTJsonTextWriter代替。
uj5u.com熱心網友回復:
無需遍歷 JSONObject。只需使用:
TFile.WriteAllBytes(Form1.filepath '\' form1.filename '.json',TEncoding.UTF8.GetBytes(LJsonObj.ToJSON))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/412479.html
標籤:
