英文系统下面的中文字符显示乱码问题

wscft 2007-09-18 09:49:41
系统是 win XP professional 英文版本, 一个单元的 dbg_1:TTntDBGrid, 展示的数据的结果是从存储过程中返回的值,

dbg_1.Columns[0].title.Caption
dbg_1.Columns[1].title.Caption
...
要赋值的类型是 widestring 型的,
我这样写,为什么程序运行之后, 显示的总是乱码呢 ? 一个汉字对应一个? 就是没有转换过来啊, 如果付给英文的字符是可以正常显示的。
代码如下:
var
ls_wstring:widestring;


ls_wstring := '人数';
dbg_1.Columns[j].title.Caption := ls_wstring;
或者
dbg_1.Columns[j].title.Caption := StringToWideString('人数', 936);


调用两个转换函数如下:
{ Convert Variant to AnsiString }
function WideStringToString(const AValue: Variant; codePage: Word): AnsiString;
{Convert AnsiString to WideStirng }
function StringToWideString(const AValue: Variant; codePage: Word): WideString;


{中文 Unicode 码 转换为 AnsiString 时候, codePage 取 936 (cp_936) }
function WideStringToString(const AValue: Variant; codePage: Word): AnsiString;
var
l: integer;
ws:widestring;
begin
ws := VarToWideStr(AValue) ;
if ws = '' then
Result := ''
else
begin
l := WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, nil, 0, nil, nil);
SetLength(Result, l - 1);
if l > 1 then
WideCharToMultiByte(codePage,
WC_COMPOSITECHECK or WC_DISCARDNS or WC_SEPCHARS or WC_DEFAULTCHAR,
@ws[1], - 1, @Result[1], l - 1, nil, nil);
end;
end;

{string码 转换为 WideString , codePage 取 936 (cp_936) }
function StringToWideString(const AValue: Variant; codePage: Word): WideString;
var
l: integer;
s: string;
begin
s := VarToStr(AValue);
if s = '' then
Result := ''
else
begin
l := MultiByteToWideChar(codePage, MB_PRECOMPOSED, PChar(@s[1]), - 1, nil, 0);
SetLength(Result, l - 1);
if l > 1 then
MultiByteToWideChar(CodePage, MB_PRECOMPOSED, PChar(@s[1]),
- 1, PWideChar(@Result[1]), l - 1);
end;
end;
...全文
291 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
numbbb 2007-09-22
  • 打赏
  • 举报
回复
可能是没有安装936转换代码页
brightyang 2007-09-22
  • 打赏
  • 举报
回复
在区域设置里面设为简体中文
tongjisheng 2007-09-22
  • 打赏
  • 举报
回复
ru
zczb 2007-09-21
  • 打赏
  • 举报
回复
关注一下
WuChenCan 2007-09-18
  • 打赏
  • 举报
回复
//dbg_1.Columns[j].title.Caption := StringToWideString( '人数 ', 936);
//改用StringToOleStr
StringToOleStr('人数 ');

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧