简繁转换的问题!!(50分)

  • 主题发起人 主题发起人 fastupcph
  • 开始时间 开始时间
F

fastupcph

Unregistered / Unconfirmed
GUEST, unregistred user!
大家有没有好的简繁转换的控件呀,或是简繁转换的方法,是不是转换字符影射表就可以了?大家帮帮忙呀!!
 
http://www.delphibbs.com/keylife/iblog_show.asp?xid=861
作者?: sandal
标题?: 用DELPHI开发简繁体应用软件的技巧
关键字: 简繁体语种
分类?: 开发技巧
密级?: 参赛
 
上面的太烦,用这个吧:

http://www.delphibbs.com/delphibbs/dispq.asp?lid=2266427

十分钟搞定。
(转换之后在繁体下编译就可)
 
你先要去下载个D6TOD5的软件,将D6的.dfm文件转换一下(因为他是UNICODE编码的,转成TEXT格式的),然后随便用个简繁软件转换一下就可以了,毕竟大部分都是在窗体文件中的 (.dfm),还有数据库设计千万不要有中文的字段
 
好像这些方法都比较麻烦也,有没有更快的方法啊[8D]
 
unit CVCode;

interface
function GBtoBIG5(value: string): string;
function BIG5toGB(value: string): string;

implementation

var
BIG5Order: array[0..14757] of Word;
GBOrder : array[0..8177] of Word;

function GBOffset(value: string): integer;
begin
if length(value) >= 2 then
Result := (Ord(value[1]) - 161) * 94 + (Ord(value[2]) - 161)
else
Result := -1;
end;

function BIG5Offset(value: string): integer;
begin
Result := -1;
if length(value) >= 2 then
begin
if (Ord(value[2]) >= 64) and (Ord(value[2]) <= 126) then
Result := (Ord(value[1]) - 161) * 157 + (Ord(value[2]) - 64);
if (Ord(value[2]) >= 161) and (Ord(value[2]) <= 254) then
Result := (Ord(value[1]) - 161) * 157 + 63 + (Ord(value[2]) - 161);
end
end;

function WordToString(value: Word): string;
begin
Result := Chr(Hi(value)) + Chr(Lo(Value));
end;

function isBIG5(value: string): Boolean;
begin
if (length(value)>=2) then
begin
if (value[1] < #161) then
Result := false
else
if ((value[2] >= #64) and (value[2] <= #126)) or ((value[2] >= #161) and (value[2] <= #254)) then
Result := true
else
Result := false
end
else
Result := false
end;

function isGB(value: string): Boolean;
begin
if (length(value)>=2) then
begin
if (value[1] <= #161) and (value[1] >= #247) then
Result := false
else
if (value[2] <= #161) and (value[2] >= #254) then
Result := false
else
Result := true
end
else
Result := true;
end;

function GBtoBIG5(value: string): string;
var
leng, idx : integer;
tmpStr : string[2];
Offset : integer;
output : string;
begin
output := '';
leng := length(value);
idx := 1;
while idx <= leng do
begin
tmpStr := value[idx]+ value[idx + 1];
if isGB(tmpStr) then
begin
offset:=GBOffset(tmpStr);
if (offset >= 0) and (offset <= 8177) then
begin
output := output + WordToString(GBOrder[offset]);
inc(idx);
end
else
output := output + value[idx] ;
end
else
output := output + value[idx] ;

inc(idx, 1);
end;
Result := output;
end;

function BIG5toGB(value: string): string;
var
leng, idx : integer;
tmpStr : string[2];
output : string;
offset : integer;
begin
output := '';
leng := length(value);
idx := 1;
while idx <= leng do
begin
tmpStr := value[idx]+ value[idx + 1];
if isBIG5(tmpStr) then
begin
offset:=BIG5Offset(tmpStr);
if (offset >= 0) and (offset <= 14757) then
begin
output := output + WordToString(BIG5Order[offset]);
inc(idx);
end
else
output := output + value[idx];
end
else
output := output + value[idx];

inc(idx);
end;
Result := output;
end;
 
下面太长了发不出去,想要留mail
 
多人接受答案了。
 
后退
顶部