打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
文件批量改名工具官网–新起飞部落 ? lazarus UTF8 unicode

lazarus UTF8 unicode

2009年10月6日 Admin 发表评论 阅读评论

最近在用Lazarus学写程序,被他的string搞郁闷了,中文乱码,汗一个

没办法了,一咬牙,闹清UTF8大概是杂回事吧,查资料查到这个东东,不错,存个档。

Unicode和UTF-8之间的转换关系表

UCS-4编码 UTF-8字节流
U-00000000 – U-0000007F: 0xxxxxxx
U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx


看完上面的东东,在来看这一段程序,会有更深的理解。来自LCLProc。

function UTF8CharacterLength(p: PChar): integer;
begin
if p<>nil then begin
if ord(p^)<%11000000 then begin
// regular single byte character (#0 is a character, this is pascal ;)
Result:=1;
end
else if ((ord(p^) and %11100000) = %11000000) then begin
// could be 2 byte character
if (ord(p[1]) and %11000000) = %10000000 then
Result:=2
else
Result:=1;
end
else if ((ord(p^) and %11110000) = %11100000) then begin
// could be 3 byte character
if ((ord(p[1]) and %11000000) = %10000000)
and ((ord(p[2]) and %11000000) = %10000000) then
Result:=3
else
Result:=1;
end
else if ((ord(p^) and %11111000) = %11110000) then begin
// could be 4 byte character
if ((ord(p[1]) and %11000000) = %10000000)
and ((ord(p[2]) and %11000000) = %10000000)
and ((ord(p[3]) and %11000000) = %10000000) then
Result:=4
else
Result:=1;
end
else
Result:=1
end else
Result:=0;
end;
分类: 2.Delphi 标签: delphi, freepascal, lazarus, unicode, utf8已阅 467 次
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
文本文件的智能识别方法
文本编码的智能识别
十六进制转化为十进制数据的函数
ParamsToVariant and VariantToParams
Delphi获取汉字拼音以及拼音首字母
编码gb2312,big5,gbk,utf-8识别的最新方法的探讨和c++的实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服