我是靠谱客的博主 健壮柜子,最近开发中收集的这篇文章主要介绍关于Windows的命令行多语言输出,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

多语言支持是个古老的问题,牵扯到各个层面上的问题,包括操作系统、字符集、程序本身的支持等等。命令行下是否能够完全支持多国语言呢,下面进行一些尝试,用来打破一些既定的错误概念。

Visual Studio默认不支持UNICODE化的代码文本与资源本文。

倘若VS做的那么完美,还要命令行的编译结构以及各种第三方辅助的开发工作作甚?VS默认情况下是和VS的语言环境绑定起来的。比如我在英文的Vista x64下使用的中文VS 2005,默认VS的区域只有两个,“中文”或者是“与Windows相同”。而且,在这个环境下新建的代码文本的编码多半是本地代码,如GBK,根本不是UNICODE,于是乎从底层支持UNICODE也无从谈起。而Linux上的文本编辑器以及Code::Blocks默认就是UTF8,可以想象,在多区域多语言合作的软件开发环境中VS的这个“特色”会有多么的麻烦。

vsregion

VS的资源编辑系统支持UNICODE的显示,默认却不将字符串作为UNICODE编译进程序。

是的,你没有看错,我差一点就被这个骗过去了。

添加一个字符串,然后切换到德语输入法输入“Wörter”,其中“ö”是CP1252的字符,不是中文CP936字符。然后用LoadStringW(防止程序自己进行转换)载入到程序,打印出来肯定是

0057 003f 0072 0074 0065 0072

其中3f就是那个“?”,ASCII中的问号一枚而已,根本不是我们想要的00f6。再以代码方式打开资源文件,是不是看到这样的惨状,

wrongencode

开始我还以为是由于没配置好setlocal,反复测试最后发现在植入程序的时候VS就已经自作聪明的帮你转换成了问号。这算VS的一个BUG呢?还是FEA呢?

晓得了这个问题,解决方法就有了:在所有的字符串前加L转换为宽字符串。可是一旦你按Ctrl+S保存后,VS又自作聪明的去掉了L,真不是一般的愚蠢!对比了一下WxWidget,人家早就进化到了基于XML的数据文件XRC。可是这个VS的这个特色估计已经延续了许多年了,MS还是没有修复。

千万别以为.net时代了,古老的WIN32、MFC程序就不需要维护了,事实上还是有许多程序依旧不是虚拟机的,于是需要照顾更多。比如3dsmax,那个STRING_TABLE长得吓人……

Windows命令行默认使用本地字符集。假如你没有调用CHCP 1252切换到德语字符集,那么那个字符即使16进制显示是正确的,也无法打印出正确的字符。还是老老实实的先切换字符集吧,别瞎折腾了。

powcmdoutput

或者大家统统都写英文程序吧,这个最一劳永逸。

转载于:https://www.cnblogs.com/Jedimaster/archive/2009/10/07/1578712.html

最后

以上就是健壮柜子为你收集整理的关于Windows的命令行多语言输出的全部内容,希望文章能够帮你解决关于Windows的命令行多语言输出所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部