
procedure TForm1Button1Click(Sender: TObject);
var
strGBK: AnsiString;
strUTF8: AnsiString;
strUTF16: WideString;
begin
StrGBK := #$B2#$E2#$CA#$D4;//'测试'
ShowMessage(strGBK);
SetLength(strUTF16, Length(strGBK));
SetLength(strUTF16,MultiByteToWideChar(936,0,PAnsiChar(strGBK), Length(strGBK),PWideChar(strUTF16),Length(strUTF16)));
strUTF8 := UTF8Encode(strUTF16);
ShowMessage(strUTF8);
end;
回答完毕,谢谢。。。。。
; ——此文章摘自《Delphi开发经验技巧宝典》定价 ¥特价 ¥ 购买>>//track linktech cn/m_id=dangdang&a_id=A &l= &l_type = width= height= border= nosave>
//develop csai cn/delphi/images/ jpg >图 根据ASCII码获得字母
主要代码如下 procedure TForm Button Click(Sender: TObject); begin if (((StrToInt(Edit Text))>= )and((StrToInt(Edit Text))<= ))or (((StrToInt(Edit Text))>= )and((StrToInt(Edit Text))<= )) then Edit Text:=chr(strtoint(edit Text)); end;字母的ASCII码
本实例是用ord ()函数将字符转换成ASCII码 运行结果如图 所示
//develop csai cn/delphi/images/ jpg >图 获得字母的ASCII码
主要代码如下 procedure TForm Edit KeyPress(Sender: TObject; var Key: Char); begin if not (key in [ a z A Z # ]) then key:=# ; if (Ord(key)> )and(Ord(key)< ) then x:=IntToStr(Ord(key)); end; lishixinzhi/Article/program/Delphi/201311/8497
如果是 delphi 高版本,比如 delphi xe 及以上,对 utf8 支持比较广泛,这时,直接就可以保存为 utf8,而低版本的 delphi,可以尝试以下功能函数代码:
procedure SaveUTF8File(AContent:WideString; AFileName:string);var
ffileStream: TFileStream;
futf8Bytes: AnsiString;
S: AnsiString;
begin
ffileStream := TFileStreamCreate(AFileName, fmCreate);
futf8Bytes := UTF8Encode(AContent);
S := #$EF#$BB#$BF;
ffileStreamWrite(S[1], Length(S));
ffileStreamWrite(futf8Bytes[1], Length(futf8Bytes));
ffileStreamFree;
end;
要 *** 作寄存器(EAX),只有用嵌入汇编啊。。。
若是变量,DELPHI也支持位 *** 作,形式上是一样的,比如
var
i1,i2:integer;//32位系统下integer为32位
i1:=foo(); //默认下DELPHI函数返回值通常在EAX中,这里假定你用嵌入汇编过程得到了所谓的693
i2=i1 and $0FFFF;
//将UTF-8编码转为ANSI编码
function UTF8ToAnsiString(utf8str:string; CodePage: integer):AnsiString;
var
i:integer;
buffer:widestring;
ch,c1,c2:byte;
begin
result:='';
i:=1;
while i<=Length(utf8str) do
begin
ch:=byte(utf8str[i]);
setlength(buffer,length(buffer)+1);
if (ch and $80)=0 then //1-byte
buffer[length(buffer)]:=widechar(ch)
else begin
if (ch AND $E0) = $C0 then
begin // 2-byte
inc(i);
c1 := byte(utf8str[i]);
buffer[length(buffer)]:=widechar((word(ch AND $1F) SHL 6) OR (c1 AND $3F));
end
else
begin // 3-byte
inc(i);
c1 := byte(utf8str[i]);
inc(i);
c2 := byte(utf8str[i]);
buffer[length(buffer)]:=widechar((word(ch AND $0F) SHL 12) OR (word(c1 AND $3F) SHL 6) OR (c2 AND $3F));
end;
end;
inc(i);
end; //while
i := WideCharToMultiByte(codePage,WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,@buffer[1], -1, nil, 0, nil, nil);
if i>1 then
begin
SetLength(Result, i-1);
WideCharToMultiByte(codePage,WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,@buffer[1], -1, @Result[1], i-1, nil, nil);
end;
end;这是我百度博客上的技术文,你可以去看一下,有问题可以去那里留言……>
‘我’的unicode编码并非52946,而是25105,即U+6211,52946是GBK编码,即$CED2
在delphi的高版本中缺省使用Unicode,因此用Chinese2MacCode_返回的是Unicode编码25105,如果想返回52946,把字符串转为ansistring就行了。
根据字节是不能反推编码的,因为一样的数据在不同的编码时表示不同的字符,否则就不会有乱码的事情发生了
所以必须在保存的时候同时保存编码,一般来说你自己的业务数据应该保存时就是相同的编码才对
如果说你只是在开发阶段向识别出来,以后直接使用这个编码,这个还有点可能的
不过这个跟语言是没有关系的,你应该看看字符集和编码的相关知识
不同编码的字节数可能不同,如果有明文与字节数据比较,应该是可以判断编码的
以上就是关于请问delphi怎么把gbk编码转换为utf编码 全部的内容,包括:请问delphi怎么把gbk编码转换为utf编码 、Delphi开发技巧:ASCII码与编码转换[2]、delphi保文本文件怎么选择编码UTF-8格式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)