今天一晚上在整这个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;

解决方案 »

  1.   

    上面的MainOutMessage输出结果为:
    sText第i位的字符和sText2第i+1*i是一样的
      

  2.   

    没试过D2010,不过我觉得Parse应该有支持UnicodeString的Overload
      

  3.   

    你可以转换一下,定义一个AnsiString,然后把这个AnsiString赋值给UnicodeString,这样系统就帮你转换了。
      

  4.   

    听说UnicodeString和AnsiString前256个字符标示是一样的。
      

  5.   

    delphi和bcb最蛋疼的就是字符问题
    有时候有转过转过去好几次