处理ANSI中文字符问题

     今天写文本框类,使用ANSI编码对中文处理遇到的问题,现在和大家一起分享一下,如果您觉得这个问题很菜,那你可不并看,也不要,不要出来无理批评.如果您有更深的见解,更好的方式,本人非常愿意您能分享.

     好进入正题,在vc中,使用指针方式保存字符串.如  char* str = "字符串abc123";  这个指针长度为:字符串(6个字节)+abc123(6个字节)=12个字节.这时此串中有中文有英文有数字,英文数字和字符占有1个字节,而中文占两个字节.所以对中文和英文字符的处理是不同的.比如,我的文本框在按下Backspace键后,光标的前一个字符或文字消除,并且更新光标的位置,此操作先取光标的位置,在取文本中的字符串在光标前的那个字符的指针,如我要对文本框中的str字符串f进行操作"字符串abc123" str[12] = 0; 这时 "字符串abc12" 这样就可实现删除操作.

      但是如果字符不是这样的而是  "abc123字符串",str[12] = 0,此时的操作就有问题,因为中文字符是两个字节,现在只操作了一个字节.那有人说了,str[11]=0; 不就行了吗?对是这样,就是这样做,但是我们比需要有个判断什么时候要将两个字节清空,什么时候只清空一个字节,好了,上面说的这些都是对问题的描述,也同时给有想法的人提供一点如何自已实现文本框的思路,(什么你问我为什么要自已实现,vc API里面不是可以创建吗,只要设置几个值就ok了吗?嗯,是啊,但是有没有觉得那个文本框的样式,显示方式啊,都是很固定的吗,即使那些样式能够满足用户需求,难到你就不想尝试一下自已实现文本框控件功能的快感吗!)

      继续说怎么设置这个判断,ascll码大家都知道,每一个英文字母,数字,符号,都有他自已的ascll码,如 小a = 97(10进制),ascll的前128就是表示的a-z,A-Z,0-9,还有一些我们常用的基本符号,那中文怎么表示呢!两个字节表示,第一个字节的高8位一事实上为1,符号区 行A1-A9 列A1-FE,汉字区: 行B0-F7 列:A1-FE 6768个汉字,那这些是什么意思呢!那我们来看一下一个中文在计算机中表示是怎么表示的.比如,"浩"字: BA C6 那你问了,你怎么知道呢!我们可以有n种方式来验证,方法1:你可以用任何一种16进制编器,我使用UltraEdit,打开后打上一个中文"浩"后,按Ctrl+h 查看二进制编码,看看是不是BA C6 , 方法2:在vc中使用单步调试,然后执行  char* str = "浩";后查看 str指针的地址,然后在调试工具栏中把 Memory选项打开,将str指针地址输入回车后,查看两个连续地址,还有很多种,如果你够狠,可以使用一些比较底层的工具,如OllyDbg,debug调试工具对可执行文件进行调试,找出来,好了,我们知道了汉字编码规律,就可以根据ascll码来意判断了

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值