首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2012-03-08 
英文系统下面的中文字符显示乱码问题系统是 win XP professional 英文版本, 一个单元的 dbg_1:TTntDBGrid,

英文系统下面的中文字符显示乱码问题
系统是 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;

[解决办法]
//dbg_1.Columns[j].title.Caption := StringToWideString( '人数 ', 936); 
//改用StringToOleStr
StringToOleStr('人数 ');
[解决办法]
关注一下
[解决办法]
ru
[解决办法]
在区域设置里面设为简体中文
[解决办法]
可能是没有安装936转换代码页

热点排行