Delphi中讓sqlite顯示Unicode

來源:互聯網
上載者:User

最近做了一個小程式,用到了SQLite,後台用Python寫的剖析器,將資料插入(更新)到SQLite資料庫中,Delphi的程式周期顯示資料庫的內容。Delphi訪問SQLite採用的Aducom組件。Python插入的資料編碼都是採用的UTF-8,而Delphi的DBGrid、cxGrid控制項顯示的卻是亂碼,主要是因為Delphi7不支援Unicode造成的,因此要想辦法讓他支援。

嘗試了多種方法,包括使用據說支援Unicode的TMS Unicode Component、SUIPack等,都不好使。最後還是用了簡單的方法,在資料集組件的需要顯示的欄位的OnGetText事件,在事件處理中,對資料進行Unicode到GB的轉換。

procedure unicode2gb(const unicodestr:string; var GbStr:String);var SourceLength:integer;  DoneLength:integer;  AscNo:integer;  Byte1,Byte2,Byte3:integer;begin GbStr:=''; if Trim(unicodestr)='' then exit; SourceLength:=Length(UnicodeStr); DoneLength:=1; repeat  AscNo:=ord(UnicodeStr[DoneLength]);  case (AscNo and $E0) of  $E0:begin     Byte1:=(AscNo and $0f) shl 12;     Inc(DoneLength);     if DoneLength>SourceLength then break;     AscNo:=ord(UnicodeStr[DoneLength]);     Byte2:=(AscNo and $3f) shl 6;     Inc(DoneLength);       if DoneLength>SourceLength then break;     AscNo:=ord(UnicodeStr[DoneLength]);     Byte3:=AscNo and $3f;    end;  $C0:begin     Byte1:=(AscNo and $1f) shl 6;     Inc(DoneLength);     if DoneLength>SourceLength then break;     AscNo:=ord(UnicodeStr[DoneLength]);     Byte2:=(AscNo and $3f);     Byte3:=0;    end;  0..$bf:begin     Byte1:=AscNo;     Byte2:=0;     Byte3:=0;    end;  end;//case;   GbStr:=GBStr+widechar(Byte1+Byte2+Byte3);   Inc(DoneLength);   if DoneLength>SourceLength then break; until DoneLength>=SourceLength;end;

另外,在用cxGrid進行顯示的時候,要根據欄位的值進行顏色的設定,這個可以在TableView的Styles的OnGetContentStyle事件中進行處理,如下所示:

procedure TFormMain.cxGrid1DBTableView1StylesGetContentStyle(  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);var  attention : integer;begin  attention := ARecord.Values[5];  if attention > 0 then  begin    AStyle := styleAttention;    exit;  end;  if ARecord.Values[4] = 0 then  begin    AStyle := styleRed;  end  else  begin    AStyle := styleDefault;  end;end;

其中styleAttention、styleDefault等是放在cxStyleRepository1中的設定好的各種Style。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.