解决编程中的乱码问题

乱码问题通常只出现在你不使用英文的情况下,或程序运行在不同语言的操作系统下。经常可能在程序中调试显示正常,到了界面上就是乱码,也有可能在程序里看到的就是乱码。而且令人奇怪的是一样的函数或操作方式对英文就显示正常,对中文显示就不正常。再有现在我们的程序很有可能不只运行在中文操作系统下,软件的国际化,需要我们能做出多语言版本的软件,在中文操作系统下正常显示的程序,到了其他语言操作系统下就不正常了。凭我的经验,通常有以下几种可能。
      第一种,就是字体不对。比如,一个list control,debug时看InsertItem里的值是对的,到界面上就是乱码。那么这时可以到资源管理器里看看list control设的字体是什么,有些字体应该就是不能用于显示中文。你可以去控制面板里的字体里看看,那些文件大小比较大的,时间比较靠后的通常包含的各种语言的字体比较多,不光中文简体可以,中文繁体也可以,甚至韩语等也可以正常显示。这样你的程序可以在任何语言的操作系统下都可以正常显示(当然还有其他一些情况需要考虑)。还有一点要注意,就是除了在资源管理器里可以设置的字体外,还有你在程序里用TextOut或DrawText输出的文字,如果你程序里没有设置字体的话,默认应该是system字体,那么如果你需要的语言不能正常显示的话,应该在TextOut或DrawText前把字体设置成一个合适的字体。
      第二种,就是Unicode的问题。如果你的程序里字符串不是使用Unicode的话,那么你的程序就不能在不同语言操作系统下正常运行。这个其实不需要赘述了。关于unicode的介绍有很多。简言之,就是字符要用TCHAR,相关的字符串函数要用_ts开头的。
     第三种,就是设置代码页的问题,这里首先就是说资源文件要有它的代码页设置,可以用文本方式打开资源文件有如下的代码:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED
#pragma code_page(936)
#endif //_WIN32

      这就是设置代码页。可以用专用的工具转换资源。还有就是一些字符串函数使用前需要设置代码页,像_tcslwr,wcstombs等。需要先调用setlocale设置相应的代码页。

       此外,还有些特殊的问题。一个就是ComboBox里的内容,如果是在程序代码里添加的,那么换一个操作系统没问题,如果是在资源编辑器里添加,则一定是你要在哪个操作系统下使用你的程序,就在哪个操作系统下使用资源编辑器添加,否则就是乱码,这种是用资源转化工具转化不了的。ComboBox里添加的内容,如果用文本方式打开资源文件,是根本找不到明文的对应项,我估计是采用了其他的编码方式进行了保存。此外还遇到过一次在繁体版的操作系统下,在vc编译器里看到我的资源编辑器里任何的字符都是乱码,后来发现是在控制面板的“区域和语言选项”里区域设置的不是不对,不是中文(台湾),所以显示就不正常。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值