Utf8编码转换问题 Delphi
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Utf8编码转换问题 Delphi相关的知识,希望对你有一定的参考价值。
怎样把 ( 你好 ) 这样的编码转换成中文
要求:给出Delphi7的具体代码...
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;这是我百度博客上的技术文,你可以去看一下,有问题可以去那里留言……http://hi.baidu.com/ray108/blog/item/be69e4423c9df3189313c6a8.html 参考技术A 类型转换失败。 GCC: warning: initialization from incompatible pointer type G++: error: cannot convert 'int (*)[5]' to 'int**' in initialization C/C++语言不直接支持多维数组,所谓的多维数组是嵌套数组,即数组的数组。在引用这种数组时,元素必须是确定的——当元素作为数组,本身的长度和元素的类型也必须是确定的。这就导致数组退化为指针时,只限第一维的长度可以不确定(LS的“a是一个数组名,也就是一个const指针”——这是一个流传比较广的错误说法——上述理由是原因之一;有兴趣的可以去CSDN找一下“数组名是不是右值”的讨论)。a对应的指针应为int(*)[5]类型,这里定义int(*p)[5]=a;就没问题了。C语言类型检查规则比较松,所以int**转换仅警告。C++类型检查规则比较严格,在这种情况下禁止转换,产生编译错误。 LZ你确定VS下编译的是.c文件而不是.cpp文件? 参考技术B 用过滤器啦
以上是关于Utf8编码转换问题 Delphi的主要内容,如果未能解决你的问题,请参考以下文章
在linux系统下使用lazarus,ansi和utf8编码格式怎么互相转换? 我需要做一个可以读取windows系统发送来的t