身份证信息记录类型如下定义:其中name,address读出来都是简体的汉字。
在繁体xp系统里读出来的姓名和地址都带有乱码:‘?’,用了简体转繁体的函数还是一样某些字显示问号。而在我开发的电脑里面就不会显示乱码。完全可以把简体转换成繁体显示出来。//定义如下
tagIDCardData = packed record
Name: array[0..31] of AnsiChar;
Sex: array[0..3] of AnsiChar;
Nation: array[0..5] of AnsiChar;
Born: array[0..17] of AnsiChar;
Address: array[0..71] of AnsiChar;
IDCardNo: array[0..37] of AnsiChar;
GrantDept: array[0..31] of AnsiChar;
UserLifeBegin: array[0..17] of AnsiChar;
UserLifeEnd: array[0..17] of AnsiChar;
Reserved: array[0..37] of AnsiChar;
PhotoFileName: array[0..254] of AnsiChar;
end; IDCardData = tagIDCardData;
TCardMsg = ^IDCardData;//我是这样子引用的:
var
MyCardData:TCardMsg;
begin
lblName.Caption := MyCardData.Name;
end;结果显示有乱码?我试过用简体转繁体的函数,但是转过来还是一样的有乱码。(乱码为'?'号)
在繁体xp系统里读出来的姓名和地址都带有乱码:‘?’,用了简体转繁体的函数还是一样某些字显示问号。而在我开发的电脑里面就不会显示乱码。完全可以把简体转换成繁体显示出来。//定义如下
tagIDCardData = packed record
Name: array[0..31] of AnsiChar;
Sex: array[0..3] of AnsiChar;
Nation: array[0..5] of AnsiChar;
Born: array[0..17] of AnsiChar;
Address: array[0..71] of AnsiChar;
IDCardNo: array[0..37] of AnsiChar;
GrantDept: array[0..31] of AnsiChar;
UserLifeBegin: array[0..17] of AnsiChar;
UserLifeEnd: array[0..17] of AnsiChar;
Reserved: array[0..37] of AnsiChar;
PhotoFileName: array[0..254] of AnsiChar;
end; IDCardData = tagIDCardData;
TCardMsg = ^IDCardData;//我是这样子引用的:
var
MyCardData:TCardMsg;
begin
lblName.Caption := MyCardData.Name;
end;结果显示有乱码?我试过用简体转繁体的函数,但是转过来还是一样的有乱码。(乱码为'?'号)
解决方案 »
- delphi随机函数用法
- 求助 用DELPHI 汇总多个EXCEL表格的数据到一张EXCEL表
- dhtmledit在windows2003下的使用问题,大家帮忙啊!
- 用findwindowex(*.handle,bm_click,0,****)我不会形容对话框中的((是(Y))-y下面还有下划线的这个按钮),帮我写一下
- sql 语句如何防止语句出错
- 有关文件格式的转换
- 情人节大散分(独身男女来者有分)
- 如何取的一个文本文件的记录数,在线等待
- 李维<delphi和分布式多层应用系统第一个例子我碰到到问题,,,,
- 十万火急:mdf和ldf是什么数据库的格式,DELPHI可以访问吗?????
- 关于存储图片到数据库的问题。
- delphi 2009 简体 转 繁体 (请看清我的要求啊)
function UnicodeEncode(Str:string;CodePage:integer):WideString;
var
Len:integer;
begin
Len:=Length(Str)+1;
SetLength(Result,Len);
Len:=MultiByteToWideChar(CodePage,0,PChar(Str),-1,PWideChar(Result),Len);
SetLength(Result,Len-1); //end is #0
end;function Utf8Encode(const WS: WideString): UTF8String;
var
L: Integer;
Temp: UTF8String;
begin
Result := '';
if WS = '' then Exit;
SetLength(Temp, Length(WS) * 3); // SetLength includes space for null terminator
L := UnicodeToUtf8(PChar(Temp), Length(Temp)+1, PWideChar(WS), Length(WS));
if L > 0 then
SetLength(Temp, L-1)
else
Temp := '';
Result := Temp;
end;
function UnicodeDecode(Str:WideString;CodePage:integer):string;
var
Len:integer;
begin
Len:=Length(Str)*2+1; //one for #0
SetLength(Result,Len);
Len:=WideCharToMultiByte(CodePage,0,PWideChar(Str),-1,PChar(Result),Len,nil,nil);
SetLength(Result,Len-1);
end;function Gb2Big5(Str:string):string;
begin
SetLength(Result,Length(Str));
LCMapString(GetUserDefaultLCID,LCMAP_TRADITIONAL_CHINESE,
PChar(Str),Length(Str),
PChar(Result),Length(Result));
Result:=UnicodeDecode(UnicodeEncode(Result,936),950);
end;function Big52Gb(Str:string):string;
begin
Str:=UnicodeDecode(UnicodeEncode(Str,950),936);
SetLength(Result,Length(Str));
LCMapString(GetUserDefaultLCID,LCMAP_SIMPLIFIED_CHINESE,
PChar(Str),Length(Str),
PChar(Result),Length(Result));
end;
不要以为繁体字就是可以在繁体系统上正确显示的,繁体字有时候也是 GBK 编码的。
繁体系统用的是 big5 字符集,简体系统用的是GBK字符集,而且,GBK 是包含了 BIG5 字符集编码的,所以,在简体系统下面简繁互转可能没有什么问题,在繁体系统下面就会缺少东西了,反映出来就 ???? 这样的东西。
所以,最好先规定一种编码方法(例如同一为UTF8)再写入数据库,读取的时候就好办了。这个是我以前研究简繁转换的时候记得的片段,现在问我要具体方案我也不知道了。
至于他记录的是什么编码格式,我不知道,我只有他们给的SDK开发包,只知道读出来的是简体字,至于什么字符集就不知道了。。大位大哥对字符集比较了解的。麻烦指点迷津啊。