2008-02-10
ANSI和Unicode练习后记
关键字: unicode ansi 函数调用
首先,再次问候大家,春节好!祝愿D语言社区兴旺发达,祝愿JavaEye蒸蒸日上!
在前文中,已经讨论了如何调用ANSI和多字节的函数。本文目的是关于在D中如何更好应用。当然,很多人认为完全可以使用宽字符的函数,但是,有时候,你要调用的函数是ANSI函数(例如WinExec,仅仅有ANSI版本,不支持Unicode,当然你可以使用麻烦的ShellExecuteEx),你就必须了解Unicode的相关知识。建议阅读前文http://ideage.javaeye.com/blog/119177,运行相关例子,认真揣摩调用的几个用法。
1.首先要明白你使用的char是什么格式。char在D中,有两种格式:ANSI,Unicode。ANSI是和C兼容的。如果你的源码保存格式是UTF8,或者UTF32,那么你的char的格式就是Unicode;否则ANSI。明白char的格式,调用相关函数就好办了。
2.根据格式调用。如果是ANSI格式,调用ANSI函数时,使用std.string.toStringz函数就可以了。如果源码是Unicode格式,如果继续使用前面的方法,调用会失败。很幸运的,你只要理解了格式,就知道解决办法。
3.源码是Unicode格式时,调用ANSI函数,要使用字节转换。代码说话:
调用uc2cz转换,然后传递转换后的指针就可以了:
char[] files="c:\NotePad.exe";
WinExec( uc2cz(files).ptr,1);
4.上述的很简单,如果有错误,请大家指正!谢谢!
在前文中,已经讨论了如何调用ANSI和多字节的函数。本文目的是关于在D中如何更好应用。当然,很多人认为完全可以使用宽字符的函数,但是,有时候,你要调用的函数是ANSI函数(例如WinExec,仅仅有ANSI版本,不支持Unicode,当然你可以使用麻烦的ShellExecuteEx),你就必须了解Unicode的相关知识。建议阅读前文http://ideage.javaeye.com/blog/119177,运行相关例子,认真揣摩调用的几个用法。
1.首先要明白你使用的char是什么格式。char在D中,有两种格式:ANSI,Unicode。ANSI是和C兼容的。如果你的源码保存格式是UTF8,或者UTF32,那么你的char的格式就是Unicode;否则ANSI。明白char的格式,调用相关函数就好办了。
2.根据格式调用。如果是ANSI格式,调用ANSI函数时,使用std.string.toStringz函数就可以了。如果源码是Unicode格式,如果继续使用前面的方法,调用会失败。很幸运的,你只要理解了格式,就知道解决办法。
3.源码是Unicode格式时,调用ANSI函数,要使用字节转换。代码说话:
wchar[] a2w( char[] a )
{
return toUTF16(a);
}
char[] wcs2mbz(wchar[] ws)
{
uint codepage = 1; //2000/+
char[] rz;
rz.length = WideCharToMultiByte(codepage, 0, ws.ptr, ws.length, null, 0, null, null) + 1;
WideCharToMultiByte(codepage, 0, ws.ptr, ws.length, rz.ptr, rz.length, null, null);
rz[rz.length-1] = 0;
rz.length = rz.length-1;
return rz;
}
char[] uc2cz(char[] a)
{
return wcs2mbz(a2w(a));
}
调用uc2cz转换,然后传递转换后的指针就可以了:
char[] files="c:\NotePad.exe";
WinExec( uc2cz(files).ptr,1);
4.上述的很简单,如果有错误,请大家指正!谢谢!
评论
wandernet
2008-07-05
要在dfl的listview控件里显示来自mysql的中文字符。
怎么出错了,提示 “unicode.tostring16,不完全的utf输入"
在tango 的Stdout标准输出里输出 来自mysql的中文字符,怎么没任何显示。
C库的printf(。。) 正常
怎么出错了,提示 “unicode.tostring16,不完全的utf输入"
在tango 的Stdout标准输出里输出 来自mysql的中文字符,怎么没任何显示。
C库的printf(。。) 正常
oldrev
2008-02-16
新年快乐!
DavidL
2008-02-14
支持一个!新年快乐!
发表评论
- 浏览: 112853 次

- 详细资料
搜索本博客
最新评论
-
ANSI和Unicode练习后记
要在dfl的listview控件里显示来自mysql的中文字符。 怎么出错了,提 ...
-- by wandernet -
D语言设计模式 Observer
好文!学习
-- by hqs7636 -
ANSI和Unicode练习后记
新年快乐!
-- by oldrev -
ANSI和Unicode练习后记
支持一个!新年快乐!
-- by DavidL -
D语言的IOCP(完成端口) ...
"iocp的使用例子(哪怕是C方式的)在dsource上都找不到一个,仅此一条i ...
-- by ahadf






评论排行榜