@wz520
2015-07-28T17:28:48.000000Z
字数 1532
阅读 4587
VS2010
AStyle 是一个开源跨平台的 C/C++/Java 代码整理工具。目前最新版本为 2.05.1 。
不知道从哪个版本开始,从官方下载的 EXE 在中文(包括简体和繁体) Windows 下运行会出现 Cannot convert to multi-byte string, reverting to English
的提示。
这通常并不影响处理结果。因为这个提示是输出到 stderr 上的。而处理结果都是输出到 stdout 上的。
但是如果调用 AStyle 的程序会将 stdout 和 stderr 的文本全部重定向到同一个地方(比如GVIM就会这么做),你会发现格式化后的代码的最后总是拖着上面这串提示,这实在让人不爽。
目前的解决办法如下:
astyle --ascii
这么简单?对,就是这么简单!
尝试用 VS2010 重新编译了一下,发现不仅不加 -ascii 参数也不会出现上述警告提示,而且:
不过这里要注意,如果不加修改直接拿 build/VS2010/AStyle.sln
放到 VS2010 的 IDE 里去编译,会碰到一些问题,下面来说说如何解决。
直接按 F7 编译,编译器会说 ASLocalizer.cpp 的编码有问题,随后会出现一些莫名其妙的错误,最终编译失败。
在 IDE 里双击打开 ASLocalizer.cpp,觉得很奇怪,如果编码有问题,怎么开头注释里面的中文、日文、韩文、俄文全部可以正常显示?再仔细看一下其他地方,没发现什么地方有乱码。那么这所谓的编码是编译器在卖萌吗……?
后来想想,问题可能出在编译器对编码的处理上。就是说编译器对源代码编码的处理方法和 IDE 不一样,造成一些让人摸不着头脑的错误。
具体的说,这个 ASLocalizer.cpp 的编码是 UTF-8 不带 BOM 的(使用 文件 -> 高级保存选项 即可看到)。
没有 BOM,对于 IDE 来讲,它会尽可能地识别出正确的编码。当它打开 ASLocalizer.cpp,会智能地识别出这是 UTF-8,所以不会有乱码。
但是编译器就没有这么聪明了,它没有看到 BOM 就一律按照当前系统的默认代码页来处理(简体中文系统下就是 CP936(简体中文GBK)),那么结果就是有些字符无法正确转换,导致编译错误。
但是,只要将 ASLocalizer.cpp 存成带 BOM 的 UTF-8 ,那么无论是 IDE 还是编译器都能正确处理了。
所以解决办法就是:
然后再 F7 编译,一切OK 。
默认会动态链接运行库,运行时需要 MSVCP100.DLL 和 MSVCR100.DLL 。
想取消依赖的话:
这个重新编译的版本会自动根据当前系统语言来显示提示信息。
中文系统下会显示中文。
但是与某些对编码处理不是很聪明的文本编辑器搭配使用时,中文提示可能会导致乱码(虽然这个工具只要参数正确很少会有警告信息)。要恢复为英文,那么只要:
astyle --ascii
没错,和不重新编译的解决方法完全一样,因为 --ascii
参数就是设置提示信息为英文。