在操作系统语言选择英文时,widestring与string转换的有关问题
在操作系统语言选择英文时,widestring与string转换的问题
在操作系统语言选择英文时,发现下边情况赋值后b的值是不一样的,b的值必须通过类型为string类型的a,如果赋完后,才能保证b的值与直接赋的结果是一样的.
var
a:String;
b:WideString;
begin
//第一种赋值法:
b:= '中国 '; //这样赋完是正确的
//第二种赋值法:
a:= '中国 ';
b:=WideString(a); //这样赋完b的值是乱码,怎么转换才能使这样赋完的结果与 b:= '中国 '; 这样赋完的结果是相同的.
在使用微软TTS发音时,SPVoice控件的第一个参数是WideString,如果通过第一种赋值方式赋完值后,控件能正确工作,通过第二种方式赋完值后控件不工作,因为b的值能过数据库字段的asstring读出来的,必须做转换,该如何转换才能解决这个问题,操作系统的语言选项要求选择英文
------解决方案--------------------
貌似不知道 汗一个先~~
------解决方案--------------------
如果你在数据库里确保是正确的, 那么你的数据集里这个字段是TWideStringField, 可以通过AsWideString来访问. 如果是要直接将STRING转成WIDESTRING,应该你上面那样就可以了啊.或者看看你的数据库设置是否正确.
------解决方案--------------------
其实String 和Widestring 本来就是一回事
你的问题在于,你用得是英文操作系统,他没有中文库,即使你转化的再好也是乱码.
你要解决的问题是:能不能安装上中文库,如果不能,那不好意思,你只能把b := '中国 '改成
b := 'china '
------解决方案--------------------
我们这里有一台国外进口设备,请了专家帮忙,可是到现在为止,我们自己开发的所有代码的提示还是英文提示
------解决方案--------------------
或者你应该进行更深层的windows内核的研究,看看是不是你选择英文语言以后,就是直接不启动中文库;而要启动中文库,必须选用中文,因为,毕竟汉化系统是我们中国人做的.如果是这个样子,那能在英文语言下启用中文库,也是一个很好玩的代码
------解决方案--------------------
DELPHI 从string转换到widestring,其实是调用WIN API WideCharToMultiByte指定系统默认代码页来转换的,当系统缺省代码页不是中文了,
可以自己来调用WideCharToMultiByte进行转换,指定第一个参数代码页值为936.
------解决方案--------------------
如果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单元.
------解决方案--------------------
楼上的...改了一处,其实地方遇到什么问题没有?
------解决方案--------------------
GARNETT2183 ...没听懂....
------解决方案--------------------
没听懂。。。解释一下。。
------解决方案--------------------
汗,我意思是我没听懂你这句话...
---------------------
GARNETT2183>
楼上的...改了一处,其实地方遇到什么问题没有?
------解决方案--------------------
刚才我不是已经说过吗?String转WideString,是按缺省代码页转换,
当String里面存的是简体中文汉字,但缺省代码页不是对应的936,就不会正确的转换.
DELPHI封装了很多东西,大大方便了开发,但另一方面容易让人忽略本该去掌握的基础.
象MultiByteToWideChar这样的WIN API,是编码转换过程中再基础不过东西.
------解决方案--------------------
哦。。原来是这样,刚刚我也不知道做在说什么,晕死。。呵呵
在操作系统语言选择英文时,发现下边情况赋值后b的值是不一样的,b的值必须通过类型为string类型的a,如果赋完后,才能保证b的值与直接赋的结果是一样的.
var
a:String;
b:WideString;
begin
//第一种赋值法:
b:= '中国 '; //这样赋完是正确的
//第二种赋值法:
a:= '中国 ';
b:=WideString(a); //这样赋完b的值是乱码,怎么转换才能使这样赋完的结果与 b:= '中国 '; 这样赋完的结果是相同的.
在使用微软TTS发音时,SPVoice控件的第一个参数是WideString,如果通过第一种赋值方式赋完值后,控件能正确工作,通过第二种方式赋完值后控件不工作,因为b的值能过数据库字段的asstring读出来的,必须做转换,该如何转换才能解决这个问题,操作系统的语言选项要求选择英文
------解决方案--------------------
貌似不知道 汗一个先~~
------解决方案--------------------
如果你在数据库里确保是正确的, 那么你的数据集里这个字段是TWideStringField, 可以通过AsWideString来访问. 如果是要直接将STRING转成WIDESTRING,应该你上面那样就可以了啊.或者看看你的数据库设置是否正确.
------解决方案--------------------
其实String 和Widestring 本来就是一回事
你的问题在于,你用得是英文操作系统,他没有中文库,即使你转化的再好也是乱码.
你要解决的问题是:能不能安装上中文库,如果不能,那不好意思,你只能把b := '中国 '改成
b := 'china '
------解决方案--------------------
我们这里有一台国外进口设备,请了专家帮忙,可是到现在为止,我们自己开发的所有代码的提示还是英文提示
------解决方案--------------------
或者你应该进行更深层的windows内核的研究,看看是不是你选择英文语言以后,就是直接不启动中文库;而要启动中文库,必须选用中文,因为,毕竟汉化系统是我们中国人做的.如果是这个样子,那能在英文语言下启用中文库,也是一个很好玩的代码
------解决方案--------------------
DELPHI 从string转换到widestring,其实是调用WIN API WideCharToMultiByte指定系统默认代码页来转换的,当系统缺省代码页不是中文了,
可以自己来调用WideCharToMultiByte进行转换,指定第一个参数代码页值为936.
------解决方案--------------------
如果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单元.
------解决方案--------------------
楼上的...改了一处,其实地方遇到什么问题没有?
------解决方案--------------------
GARNETT2183 ...没听懂....
------解决方案--------------------
没听懂。。。解释一下。。
------解决方案--------------------
汗,我意思是我没听懂你这句话...
---------------------
GARNETT2183>
楼上的...改了一处,其实地方遇到什么问题没有?
------解决方案--------------------
刚才我不是已经说过吗?String转WideString,是按缺省代码页转换,
当String里面存的是简体中文汉字,但缺省代码页不是对应的936,就不会正确的转换.
DELPHI封装了很多东西,大大方便了开发,但另一方面容易让人忽略本该去掌握的基础.
象MultiByteToWideChar这样的WIN API,是编码转换过程中再基础不过东西.
------解决方案--------------------
哦。。原来是这样,刚刚我也不知道做在说什么,晕死。。呵呵