比如:大海啊故乡
结果:2759776D4A554565614E
好像要UNICODE编码字符串
UNICODE编码时需要按字节转换为16进制,而不是按字符。新学编程的菜鸟,望高手指点!

解决方案 »

  1.   

    实现代码:function Cov(Str:String):String;
    var
      i,j:Integer;
    begin
      Result:='';
      j:=0;
      for i:=1 to Length(Str) do
         begin
           Result:=Result+IntToHex(Byte(Str[i]),2);
           j:=(j+1) mod 8;
         end;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Caption := Cov('杯具啊杯具');
    end;
      

  2.   


    不行啊,原来是用delphi2009写的
    源码:
    {*******************************************************}
    {                                                       }
    {       GetLrc                                          }
    {                                                       }
    {       版权所有 (C) 2009 YulinSoft                     }
    {                                                       }
    {*******************************************************}unit untMain;interfaceuses
        Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
        Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
        IdTCPClient, IdHTTP, XMLDoc, XMLIntf, ImgList,uEncoding;type
        TfrmMain = class(TForm)
            Label1: TLabel;
            edt_arts: TEdit;
            edt_Song: TEdit;
            lbl1: TLabel;
            btn_Search: TButton;
            ListView1: TListView;
            Memo1: TMemo;
            IdHTTP1: TIdHTTP;
            GroupBox1: TGroupBox;
            RadioButton1: TRadioButton;
            RadioButton2: TRadioButton;
            ImageList1: TImageList;
            dlgSave1: TSaveDialog;
            procedure btn_SearchClick(Sender: TObject);
            procedure ListView1DblClick(Sender: TObject);
            procedure Memo1DblClick(Sender: TObject);
        private
        { Private declarations }
            function ToQianQianHexString(s: string; encode: TEncoding): string;
            function CreateQianQianCode(singer, title: string; lrcId: integer): string;
            function Conv(i: Integer): int64;
        public
        { Public declarations }
        end;var
        frmMain: TfrmMain;
    const
        SearchPath = 'http://ttlrcct.qianqian.com/dll/lyricsvr.dll?sh?Artist=%s&Title=%s&Flags=0';
        SearchPath1 = 'http://ttlrccnc.qianqian.com/dll/lyricsvr.dll?sh?Artist=%s&Title=%s&Flags=0';
        DownloadPath = 'http://ttlrcct.qianqian.com/dll/lyricsvr.dll?dl?Id=%s&Code=%s';
        DownloadPath1 = 'http://ttlrccnc.qianqian.com/dll/lyricsvr.dll?dl?Id=%s&Code=%s';
    implementation{$R *.dfm}function TfrmMain.ToQianQianHexString(s: string; encode: TEncoding): string;
    var TmpStr: string;
        ByteAy: Tbytes;
        tmpByte: Byte;
    begin
        ByteAy := encode.GetBytes(s);
        TmpStr := '';
        for tmpByte in ByteAy do
            TmpStr := Format('%s%.2x', [tmpstr, tmpbyte]);
        Result := TmpStr;
    end;function TfrmMain.Conv(i: integer): int64;
    var
        r: int64;
    begin
        r := i mod 4294967296;
        if (i >= 0) and (r > 2147483648) then
            r := r - 4294967296;
        if (i < 0) and (r < 2147483648) then
            r := r + 4294967296;
        Result := r;
    end;function TfrmMain.CreateQianQianCode(singer, title: string;
        lrcId: integer): string;
    var
        qqHexStr: string;
        MyLen, i, j, t1, t2, t3, t4, t5, c: Integer;
        t6: Int64;
        song: array of Integer;
    begin
    //GET /dll/lyricsvr.dll?dl?Id=228350&Code=1424073039 HTTP/1.1
        qqHexStr := ToQianQianHexString(singer + title, TEncoding.UTF8);
        MyLen := Length(qqHexStr) div 2;
        SetLength(song, mylen);
        for I := 0 to MyLen - 1 do
            song[i] := StrToInt('$' + copy(qqHexStr, i * 2 + 1, 2));
        t2 := 0;
        t1 := (lrcId and $0000FF00) shr 8;
        if (lrcId and $00FF0000) = 0 then
            t3 := $000000FF and (not t1)
        else
            t3 := $000000FF and ((lrcId and $00FF0000) shr 16);
        t3 := t3 or (($000000FF and lrcId) shl 8);
        t3 := t3 shl 8;
        t3 := t3 or ($000000FF and t1);
        t3 := t3 shl 8;
        if ((lrcId and $FF000000) = 0) then
            t3 := t3 or ($000000FF and (not lrcId))
        else
            t3 := t3 or ($000000FF and (lrcId shr 24));
        j := MyLen - 1;
        while (j >= 0) do
        begin
            c := song[j];
            if (c >= $80) then
                c := c - $100;
            t1 := (c + t2) and $00000000FFFFFFFF;
            t2 := (t2 shl (j mod 2 + 4)) and $00000000FFFFFFFF;
            t2 := (t1 + t2) and $00000000FFFFFFFF;
            Dec(j);
        end;
        j := 0;
        t1 := 0;
        while j <= (mylen - 1) do
        begin
            c := song[j];
            if (c >= 128) then
                c := c - 256;
            t4 := (c + t1) and $00000000FFFFFFFF;
            t1 := (t1 shl (j mod 2 + 3)) and $00000000FFFFFFFF;
            t1 := (t1 + t4) and $00000000FFFFFFFF;
            Inc(j);
        end;
        t5 := Conv(t2 xor t3);
        t5 := Conv(t5 + (t1 or lrcId));
        t5 := Conv(t5 * (t1 or t3));
        t5 := Conv(t5 * (t2 xor lrcId));
        t6 := t5;
        if (t6 > 2147483648) then
            t5 := t6 - 4294967296;
        Result := IntToStr(t5);
    end;procedure TfrmMain.btn_SearchClick(Sender: TObject);
    var
        XMLString, Singer, Title, MyUrl: string;
        XMLDOC: IXMLDocument;
        XmlNd, TmpNd: IXMLNode;
        lvitem: TListItem;
        i: Integer;
    begin
        btn_Search.Enabled := False;
        if RadioButton1.Checked then
            MyUrl := SearchPath
        else
            MyUrl := SearchPath1;
        Singer := StringReplace(edt_arts.Text, ' ', '', [rfReplaceAll]);
        Singer := StringReplace(Singer, '''', '', [rfReplaceAll]);
        Singer := LowerCase(Singer);
        Title := StringReplace(edt_Song.Text, ' ', '', [rfReplaceAll]);
        Title := StringReplace(Title, '''', '', [rfReplaceAll]);
        Title := LowerCase(Title);
        XMLString := IdHTTP1.Get(Format(MyUrl, [ToQianQianHexString(edt_arts.Text, TEncoding.Unicode), ToQianQianHexString(edt_Song.Text, TEncoding.Unicode)]));
        XMLDOC := LoadXMLData(XMLString);
        XmlNd := xmldoc.DocumentElement;
        ListView1.Clear;
        lvitem := nil;
        for I := 0 to XmlNd.ChildNodes.Count - 1 do
        begin
            TmpNd := XmlNd.ChildNodes[i];
            lvitem := ListView1.Items.Add;
            lvitem.ImageIndex := 0;
            lvitem.Caption := TmpNd.Attributes['id'];
            lvitem.SubItems.Add(TmpNd.Attributes['artist']);
            lvitem.SubItems.Add(TmpNd.Attributes['title']);
        end;
        if XmlNd.ChildNodes.Count = 1 then
        begin
            lvitem.Selected := True;
            ListView1DblClick(Sender);
        end;
        XMLDOC := nil;
        btn_Search.Enabled := true;
    end;procedure TfrmMain.ListView1DblClick(Sender: TObject);
    var
        lvitem: TListItem;
        TmpUrl, MyUrl: string;
    begin
        if RadioButton1.Checked then
            MyUrl := DownloadPath
        else
            MyUrl := DownloadPath1;
        lvitem := ListView1.Selected;
        TmpUrl := Format(MyUrl, [lvitem.Caption, CreateQianQianCode(lvitem.SubItems[0], lvitem.SubItems[1], StrToInt(lvitem.Caption))]);
        Memo1.text := IdHTTP1.Get(tmpurl);
    end;procedure TfrmMain.Memo1DblClick(Sender: TObject);
    begin
        dlgSave1.FileName := Format('%s - %s.lrc', [edt_arts.Text, edt_Song.text]);
        if not dlgSave1.Execute then Exit;
        Memo1.Lines.SaveToFile(dlgSave1.FileName, TEncoding.Unicode);
    end;end.
      

  3.   

    这个结果就是该段文本的UNICODE编码值
      

  4.   


    在delphi7下面怎么获得这个结果呢? 
      

  5.   

    这次可以了
    function ToUnicode(Ansi: string):string;
    var
      s:string;
      i:integer;
      j,k:string[2];
      a:array [1..1000] of char;
    begin
      s:='';
      StringToWideChar(Ansi,@(a[1]),500);
      i:=1;
      while ((a[i]<>#0) or (a[i+1]<>#0)) do
      begin
        j:=IntToHex(Integer(a[i]),2);
        k:=IntToHex(Integer(a[i+1]),2);
        s:=s+j+k;
        i:=i+2;
      end;
        Result:=s;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      Caption := ToUnicode('大海啊故乡');  // 2759776D4A554565614E
    end;