在操作系统语言选择英文时,widestring与string转换的问题

qiujsh 2007-03-14 12:53:31
在操作系统语言选择英文时,发现下边情况赋值后b的值是不一样的,b的值必须通过类型为string类型的a,如果赋完后,才能保证b的值与直接赋的结果是一样的.

var
a:String;
b:WideString;
begin
//第一种赋值法:
b:='中国'; //这样赋完是正确的

//第二种赋值法:
a:='中国';
b:=WideString(a); //这样赋完b的值是乱码,怎么转换才能使这样赋完的结果与 b:='中国'; 这样赋完的结果是相同的.

在使用微软TTS发音时,SPVoice控件的第一个参数是WideString,如果通过第一种赋值方式赋完值后,控件能正确工作,通过第二种方式赋完值后控件不工作,因为b的值能过数据库字段的asstring读出来的,必须做转换,该如何转换才能解决这个问题,操作系统的语言选项要求选择英文
...全文
666 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
GARNETT2183 2007-03-14
  • 打赏
  • 举报
回复
没听懂。。。解释一下。。
halfdream 2007-03-14
  • 打赏
  • 举报
回复
GARNETT2183 ...没听懂....
GARNETT2183 2007-03-14
  • 打赏
  • 举报
回复
楼上的...改了一处,其实地方遇到什么问题没有?
halfdream 2007-03-14
  • 打赏
  • 举报
回复
如果DELPHI功底够又胆大的话..我有个馊主意如下:


可以看看system.pas单元,

function WCharFromChar(WCharDest: PWideChar; DestChars: Integer; const CharSource: PChar; SrcBytes: Integer): Integer;
begin
.....
Result := MultiByteToWideChar(0, 0, CharSource, SrcBytes,
~~~把这个参数0改掉
WCharDest, DestChars);
end;

然后重新编译system单元.
halfdream 2007-03-14
  • 打赏
  • 举报
回复
DELPHI 从string转换到widestring,其实是调用WIN API WideCharToMultiByte指定系统默认代码页来转换的,当系统缺省代码页不是中文了,
可以自己来调用WideCharToMultiByte进行转换,指定第一个参数代码页值为936.
xiaocai800322 2007-03-14
  • 打赏
  • 举报
回复
或者你应该进行更深层的windows内核的研究,看看是不是你选择英文语言以后,就是直接不启动中文库;而要启动中文库,必须选用中文,因为,毕竟汉化系统是我们中国人做的.如果是这个样子,那能在英文语言下启用中文库,也是一个很好玩的代码
xiaocai800322 2007-03-14
  • 打赏
  • 举报
回复
我们这里有一台国外进口设备,请了专家帮忙,可是到现在为止,我们自己开发的所有代码的提示还是英文提示
xiaocai800322 2007-03-14
  • 打赏
  • 举报
回复
其实String 和Widestring 本来就是一回事
你的问题在于,你用得是英文操作系统,他没有中文库,即使你转化的再好也是乱码.
你要解决的问题是:能不能安装上中文库,如果不能,那不好意思,你只能把b := '中国'改成
b := 'china'
netfly 2007-03-14
  • 打赏
  • 举报
回复
如果你在数据库里确保是正确的, 那么你的数据集里这个字段是TWideStringField, 可以通过AsWideString来访问. 如果是要直接将STRING转成WIDESTRING,应该你上面那样就可以了啊.或者看看你的数据库设置是否正确.
zuoansuifeng 2007-03-14
  • 打赏
  • 举报
回复
貌似不知道 汗一个先~~
GARNETT2183 2007-03-14
  • 打赏
  • 举报
回复
哦。。原来是这样,刚刚我也不知道做在说什么,晕死。。呵呵
halfdream 2007-03-14
  • 打赏
  • 举报
回复
刚才我不是已经说过吗?String转WideString,是按缺省代码页转换,
当String里面存的是简体中文汉字,但缺省代码页不是对应的936,就不会正确的转换.

DELPHI封装了很多东西,大大方便了开发,但另一方面容易让人忽略本该去掌握的基础.
象MultiByteToWideChar这样的WIN API,是编码转换过程中再基础不过东西.

qiujsh 2007-03-14
  • 打赏
  • 举报
回复
回头试试你的方法,现在在外边
halfdream(哈欠) ( ) 信誉:144 Blog

这个问题我看了其他几个软件,比如金山词霸之类的软件都处理的挺好,没这个问题,所以我想是不是转换的方法不对

halfdream 2007-03-14
  • 打赏
  • 举报
回复
汗,我意思是我没听懂你这句话...
---------------------
GARNETT2183>
楼上的...改了一处,其实地方遇到什么问题没有?

16,747

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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