delphi7显示utf8 问题
时间:2011-10-19
来源:互联网
开发环境:delphi7 + sqlite, 因为sqlite 内部编码是以utf-8编码方式保存的,而delphi 不支持unicode 字符显示
我dbgrid 控件上显示的中文全是乱码,请问下有没有好的方法把utf8 转化为ansistring
网上找了下有网友自己写的函数转化不全,字符太长的话就截掉了,帮忙想想招吧
我dbgrid 控件上显示的中文全是乱码,请问下有没有好的方法把utf8 转化为ansistring
网上找了下有网友自己写的函数转化不全,字符太长的话就截掉了,帮忙想想招吧
作者: wyuan_li 发布时间: 2011-10-19
谁说不支持?widestirng
作者: funxu 发布时间: 2011-10-19
难道系统自带的Utf8ToAnsi不行?
作者: lght 发布时间: 2011-10-19
使用Tnt元件来处理。
作者: SmallHand 发布时间: 2011-10-19
//将UTF-8字符串转为代码页为CodePage的AnsiString。
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;
作者: jingtuzhong 发布时间: 2011-10-19
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28