高手也有问题-----关于Unicode

Siney 2002-06-23 01:03:24
最近看Wps office2002的广告词上说,Unicode 内核什么种种.......

我以前就对Unicode不是很了解,只知道他是双字节来处理文字,所以比较适合国际化。但是怎么来用啊,我最近写了一个文本编辑控件就是处理中文时总是半个汉字,非常讨厌,能不能用Unicode解决啊??
...全文
50 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
短歌如风 2002-06-24
  • 打赏
  • 举报
回复
昨天在网吧回的贴子,由于上网卡时间用完了,所以没写完。
我们在写COM程序(服务或客房)时,经常要对BSTR类型进行处理,BSTR是一种特殊结构的使用Unicode编码的字符串。它的空间分配和释放必须用专门的API函数,而其它字符串处理(不会导致空间重分配或释放的处理)就可以用Unicode的字符串API去做了。如我们要把一个char* 传递到COM中要求BSTR的参数中,有一种简单的方法:
先用SysAllocStringLen分配足够的空间(设为原字符串长度,可能用不了,但不会不够用)。然后调用wsprintfW(bstrDest,"%hs",strSource)可以了。其它如lstrcpyW,lstrcmpW,lstrcatW等也都可以在处理BSTR类型的数据时使用。

前面pazee(耙子)提到:
“vc的作出来的程序也是unicode的”,这种说法是不正确的。在用VC做程序时,缺省是使用的MultiBytes Code,而且,在改为用Unicode时,MFC类库还会有些问题。
BCB也并不是不支持Unicode,而是VCL不支持Unicode.在用BCB写不用VCL的程序时,你完全可以用Unicode(不过要修改工程的"Option Source",很麻烦)。
Siney 2002-06-24
  • 打赏
  • 举报
回复
感谢各位的精彩发言!
naughtyboy 2002-06-24
  • 打赏
  • 举报
回复
其实说来unicode的原理非常简单,8为数值不能比表示,那就换成宽字符,比如说16位,与混乱的256字符代码映射,以及含有一些单字节代码和一些双字节代码的双字节字符集不同,unicode是统一的16位,这样就允许表示65536各字符.
unicode最大的好处就是只有一个字符集,没有一点含糊.当然,unicode也有缺点,字符串占用的内存是ascll的两倍
短歌如风 2002-06-24
  • 打赏
  • 举报
回复
Unicode是一种统一用双字节字符表示某种语言下的所有字符的方式。比如在我们所用的中文系统中,传统的方法是用单字节字符表示英文字母和符号,用双字节字符表示汉字和中文符号,这种单字节字符与双字节字符混合使用的方式使字符串的各种处理都变得很复杂。如果改用Unicode去做,不管是中文字符还是英文字符都是双字节字符,这样处理起来就比较简单。
在32位Windows中开始提供了对Unicode的支持,在C++中,许多Windows API中的函数其实都是宏,它的实际名字是我们看到的名字末尾加上A(MultiBytes Code)或加上W(Unicode).具体使用哪一个,根据你在工程中的设置决定。当你在设置中预定义了UNICODE宏时,就表明使用Unicode函数。而它的字符串参数类型也被定义成LPTSTR,在定义了UNICODE时,它就是LPWSTR,否则就是LPSTR.而我们在写字符串常量时应写成_TEXT("..."),这样才能便于修改为Unicode代码。
有时你也需要(在非Unicode的程序中)指明调用的是使用Unicode代码的API函数,方法就是直接调用+W的函数反之亦然。
耙子 2002-06-23
  • 打赏
  • 举报
回复
你这个标题有些大言不惭。

unicode被定位未来的通用字符集,它包含定义了几乎全部的文字和符号。
win9x支持unicode,winnt是unicode内核,
office97开始已经采用全部的unicode内核了。
vc的作出来的程序也是unicode的,
java现在更是彻底的unicode,

你的文本编辑控件出现半个汉字,不知道你怎么写的,这个问题在dos下都能解决的,你只要一下是否整个汉字就好了,你可以从当前的光标位置开始往前判断,连续统计半个汉字的个数,直到遇到一个非汉字的编码(数字,英文、符号),根据奇偶你就能知道当前的光标是在一个汉字的尾部还是一个汉字的中间了。这是ccdos的方法,比较实用。

bcb对于unicode支持的不是很方便,你当然可以重新采用unicode来做,但是一样麻烦。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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