delphi 编码与汉字转换问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi 编码与汉字转换问题相关的知识,希望对你有一定的参考价值。

比如十六进制的BE CD,转为十进制为48845,它是汉字“就”的GB2312编码。在Delphi中有什么函数可以把48845转换为汉字“就”?我用chr(48845)得出的不是这个字,是不是编码错了?还有什么方法吗?
还有如何把“就”转换为BE CD?

参考技术A GB2312编码 跟 计算机内码是两回事,所以 48845 不能用 CHR 转换成“就”。
一个汉字的计算机内码是2个字节的。
你要是 想用 GB2312编码 转换成汉字,起码要在程序里面提供一个GB2312编码编码表。
想转换就在这个表里面查汉字就可以了。
参考技术B var s1,s2:byte;
sd,sb:string;

begin
sd:='就';
ShowMessage(IntToHex(Ord(sd[1]),2));
ShowMessage(IntToHex(Ord(sd[2]),2));
s1:=$be;
s2:=$cd;
sb:=chr(s1)+chr(s2 );
showMessage((sb));
end;
d7可以通过,如果用高版本编译器略有变化。本回答被提问者和网友采纳

Utf8编码转换问题 Delphi

怎样把 ( 你好 ) 这样的编码转换成中文

要求:给出Delphi7的具体代码...

//将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;这是我百度博客上的技术文,你可以去看一下,有问题可以去那里留言……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 用过滤器啦

以上是关于delphi 编码与汉字转换问题的主要内容,如果未能解决你的问题,请参考以下文章

如何实现UTF-8 Unicode Ansi 汉字编码转换

ASP.NET 几种编码转换成汉字

Utf8编码转换问题 Delphi

汉字怎样转换十六进制php

如何使用C语言将汉字转换成UTF8编码,如将“你好”转成:%E4%BD%A0%E5%A5%

汉字编码与ASCII编码有何区别