社区
C++ Builder
帖子详情
高手也有问题-----关于Unicode
Siney
2002-06-23 01:03:24
最近看Wps office2002的广告词上说,Unicode 内核什么种种.......
我以前就对Unicode不是很了解,只知道他是双字节来处理文字,所以比较适合国际化。但是怎么来用啊,我最近写了一个文本编辑控件就是处理中文时总是半个汉字,非常讨厌,能不能用Unicode解决啊??
...全文
50
5
打赏
收藏
高手也有问题-----关于Unicode
最近看Wps office2002的广告词上说,Unicode 内核什么种种....... 我以前就对Unicode不是很了解,只知道他是双字节来处理文字,所以比较适合国际化。但是怎么来用啊,我最近写了一个文本编辑控件就是处理中文时总是半个汉字,非常讨厌,能不能用Unicode解决啊??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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来做,但是一样麻烦。
Unicode
和Python的中文处理
在Python语言中,Uincode字符串处理一直是一个容易让人迷惑的
问题
。许多Python爱好者经常因为搞不清
Unicode
、UTF-8还有其它许许多多的编码之间的区别而大伤脑筋。笔者曾经也是这“伤脑筋一族”的成员,但经过半年多...
sphinx中文语音训练手册
inFile是准备好的领域内语料文本,例如berginput.txt里关于图形用户界面和语音朗读、计算机方面的文本。 txtFile是将输出用于sphinx进行统计的语料文件 tranFile是sphinx中的transcription文件,它告诉sphinx...
windows xp,vista,win7启动修复;自动修复XP/VISTA/WIN7系统引导
万一NT6.1安装不成功的话将会连原NT5.x也进不了而浪费力气处理,改用本工具添加引导将安全的保留原NT5.x菜单避免可能发生的
问题
,本工具代替Bcdboot+bootsect+Bcdedit的多项操作。 7. 添加vhd系统菜单:NT6.1系统中...
超牛的pb打印程序(源码)可以自定义纸张
超牛的pb 打印程序,在pb9以下很好使,可以自定义纸张,但是在pb11.5中不太好使,哪位
高手
可以下载下来看看该怎么修改,我修改了好长时间也没有解决。
问题
应该是出在对外部函数的调用上,即ansi和
unicode
的
问题
,...
21世纪C语言编程-英文版
C语言编程新视角,编程老手的经验之谈,不同于普通的C语言编程书籍,讲解C语言编程碰到的难题,如...阅读英文原版图书,使你能够用英文描述编程碰到的
问题
,不仅提高英语表达能力,还可以得到国外
高手
的帮助,如stackoverflow。
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章