今天一晚上在整这个UnicodeString和AnsiString的问题了...
现在是用JSONObject解析一段字符.若不为AnsiString则不能解析.
使用AnsiString的参数可以解析了.但是用JSONObject.ToString返回的却是UnicodeString.强行转AnsiString就成乱码了.求帮助...
procedure TDefaultForm.Menu_HelpClick(Sender: TObject);
var
i: Integer;
sText: AnsiString;
sText2: UnicodeString;
JSONObject: TJSONObject;
begin
try
JSONObject := TJSONObject.Create;
try
sText := '{"String":"中文","True":true,"False":false,"Number":1,"Null":null}';
JSONObject.Parse(TBytes(Pointer(sText)), 0);
sText2 := JSONObject.ToString;
for i := 0 to Length(TBytes(Pointer(sText))) - 1 do
MainOutMessage(IntToStr(TBytes(Pointer(sText))[i]) + ' ' + IntToStr(TBytes(Pointer(sText2))[i + 1 * i]));
finally
JSONObject.Free;
end;
except
on E: Exception do
begin
MainOutMessage(format('[Exception] TDefaultForm.Menu_HelpClick %s', [E.Message]));
exit;
end;
end;
end;
现在是用JSONObject解析一段字符.若不为AnsiString则不能解析.
使用AnsiString的参数可以解析了.但是用JSONObject.ToString返回的却是UnicodeString.强行转AnsiString就成乱码了.求帮助...
procedure TDefaultForm.Menu_HelpClick(Sender: TObject);
var
i: Integer;
sText: AnsiString;
sText2: UnicodeString;
JSONObject: TJSONObject;
begin
try
JSONObject := TJSONObject.Create;
try
sText := '{"String":"中文","True":true,"False":false,"Number":1,"Null":null}';
JSONObject.Parse(TBytes(Pointer(sText)), 0);
sText2 := JSONObject.ToString;
for i := 0 to Length(TBytes(Pointer(sText))) - 1 do
MainOutMessage(IntToStr(TBytes(Pointer(sText))[i]) + ' ' + IntToStr(TBytes(Pointer(sText2))[i + 1 * i]));
finally
JSONObject.Free;
end;
except
on E: Exception do
begin
MainOutMessage(format('[Exception] TDefaultForm.Menu_HelpClick %s', [E.Message]));
exit;
end;
end;
end;
sText第i位的字符和sText2第i+1*i是一样的
有时候有转过转过去好几次