请问delphi怎么把gbk编码转换为utf编码

请问delphi怎么把gbk编码转换为utf编码,第1张

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格式等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/10161205.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-05
下一篇2023-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存