DEPHI 字符转UTF8

wen19851025 2009-02-16 12:12:32
请问字符怎么转UT8呀。。。
我在网上拷的代码试出来都是乱码,郁闷中....
我是这样写的
function EncodeUTF8(const s:WideString):String;
var
i,len:Integer;
cur:Integer;
t: String;
cv: Byte;
begin
Result:='';
len:=Length(s);
i:=1;
while i<=len do
begin
cur:=ord(s[i]); //BCD转换
if cur <= $7F then //单字节
Result := Result + Char(cur)
else if cur <= $7FF then //双字节
begin
cv := $80 + cur and $3F;
t := Char(cv); cur := cur shr 6;
t := Char($C0 + cur)+ t;
Result := Result + t;
end
else if cur <= $FFFF then //三字节
begin
cv := $80 + cur and $3F;
t := Char(cv); cur := cur shr 6;
cv := $80 + cur and $3F;
t := Char(cv)+t; cur := cur shr 6;
t := Char($E0 + cur)+ t;
Result := Result + t;
end
else if cur <= $1FFFFF then //四字节
begin
t := Char($80 + cur and $3F); cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($F0 + cur)+ t;
Result := Result + t;
end
else if cur <= $3FFFFFF then //五字节
begin
t := Char($80 + cur and $3F); cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($F8 + cur)+ t;
Result := Result + t;
end
else //if cur <= $7FFFFFFF then //六字节
begin
t := Char($80 + cur and $3F); cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($80 + cur and $3F)+t; cur := cur shr 6;
t := Char($FC + cur)+ t;
Result := Result + t;
end;
inc(i);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
showmessage(EncodeUTF8('中国'));
end;



结果是:涓浗

求解?
...全文
244 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
僵哥 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 wen19851025 的帖子:]
请问字符怎么转UT8呀。。。
我在网上拷的代码试出来都是乱码,郁闷中....
我是这样写的
function EncodeUTF8(const s:WideString):String;
var
i,len:Integer;
cur:Integer;
t: String;
cv: Byte;
begin
Result:='';
len:=Length(s);
i:=1;
while i <=len do
begin
cur:=ord(s[i]); //BCD转换


结果是:涓浗

求解?
[/Quote]
你把内存存到文本文件当中,然后用windows的记事本(Notepad.exe)打工看看。
bdmh 2009-02-16
  • 打赏
  • 举报
回复
用delphi自带函数,UTF8Encode(const WS: WideString)
将WS转为utf8编码
zshsuming 2009-02-16
  • 打赏
  • 举报
回复

学习
wen19851025 2009-02-16
  • 打赏
  • 举报
回复
谢谢大家的帮助,最别谢谢unsigned,再次谢谢
僵哥 2009-02-16
  • 打赏
  • 举报
回复
uses
IdURI;

ShowMessage(TIdURI.ParamsEncode(UTF8Encode('上海')));
preserve 2009-02-16
  • 打赏
  • 举报
回复
不同的编码显示出来当然是乱码了
你UTF8的字符串当成其他的编码来显示肯定有问题
你decode看下是不是原来的值就好了
僵哥 2009-02-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 wen19851025 的回复:]
主要功能我是要得到一个字符的UTF8用于URL传输

比如我要输入一个字符串:‘上海’
得到UTF8码为:‘%E4%B8%8A%E6%B5%B7’
[/Quote]
先用UTF8Encode,然后再用Indy当中的URLEncode。
wen19851025 2009-02-16
  • 打赏
  • 举报
回复
主要功能我是要得到一个字符的UTF8用于URL传输

比如我要输入一个字符串:‘上海’
得到UTF8码为:‘%E4%B8%8A%E6%B5%B7’
Seamour 2009-02-16
  • 打赏
  • 举报
回复
你觉得可以用word听mp3么?
wen19851025 2009-02-16
  • 打赏
  • 举报
回复
我使用过系统自带的还是一样
代码:
procedure TForm1.Button1Click(Sender: TObject);
var ws:WideString;
begin
ws:='中国';
showmessage(UTF8Encode(ws));
end;

你们可以的吗?

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧