visual c++ 7.1对源文件encoding的支持
2005-10-17 13:27
253 查看
visual c++ 7.1对源文件encoding的支持
hanlray@gmail.com
Revision: 1.0 Date: 2005/10/16C++的源文件首先是一个文本文件,因此必然涉及到encoding的问题,vc7.1能处理哪些encoding编码的源文件呢?以下是我对其进行的试验,我的环境是windows 2000简体中文版,系统和用户的locale设置都是中文(中国)。源文件采用iso-8859-1编码,包括除ascii以外的字符,例子是:
#include <fstream> int main() { std::ofstream of("test"); of << "aoû"; return 0; }这里包括了一个法文字符û,其在iso-8859-1中的编码是FB。在IDE中双击打开该文件,却显示有异:
#include <fstream> int main() { std::ofstream of("test"); of << "ao?; return 0; }显然û没有显示出来,代之以一个?号,并且少了右边的一个双引号。这是因为此时vc editor是以一种自动检测编码的方式来打开文件的(如果你没有更改缺省打开方式的话),这种方式会尝试从文件的元信息中来得到其编码,然后用该编码来解码文件。这种元信息最常见的就是BOM(Byte Order Mark)了,用来标识某文本采用编码是UTF-8,UTF-16,UTF-32之中的哪一个。但是这里使用的例子并没有BOM之类的元信息,此时vc editor就会用系统locale的encoding来打开文件,这里就是GBK了,FB(û)在GBK中会被认为是汉字的第一个字节,而后面的双引号就会被当作第二个字节,由于这个FB 22在GBK中并不是一个汉字的有效编码,所以显示为了一个?号,同时也失去了右半个双引号。对这种情况,我们要做的就是告诉editor正确的编码,而不是让它去用系统locale的。幸好vc7.1的有一个菜单项Open With,里面有一项:C++ Source Code Editor(with encoding),可以选择打开文件使用的编码,这里我选择Western European(ISO),显示结果正确了。 接下来进行编译,却被报告"error C2001: newline in constant",出在有法文符号的那行。细想一下,应该还是同样的原因,只不过这次遇到麻烦的是compiler,而不是editor了,这时我们可以利用C/C++的Preprocessor指令setlocale来告诉compiler正确的编码,这里我写的是:#pragma setlocale("enu")
对源文件采用其他编码的情况,包括UTF-8,UTF-16(with BOM),UTF-16(little endian without BOM),UTF-16(little endian without BOM),关于editor就不用说了,只要选对相应的编码就能正确显示;对compiler,带有BOM的自不必说,即使不带BOM的UTF-16,编译器也能检测出编码而不用setlocale。
要注意的一点是,如果vc editor识错编码的话,不但显示出来有误,当进行编辑后保存后,它还会自动地修改某些你并没有更改过的地方,对上面的例子,它会把FB 22(û")替换为3C(?),因为FB 22并不是一个有效的GBK编码。
相关文章推荐
- visual c++ 7.1对源文件encoding的支持(收藏自http://blog.csdn.net/hansoft/archive/2005/10/17/505370.aspx)
- iOS 7.1测试版支持删除OTA安装文件
- 【推荐】免费好用的拷屏工具、截图工具,支持热键、可选区域、可保存为jpg,bmp文件,可复制到剪贴板
- 让PDF文件也支持书签功能
- Visual C++ 文件操作
- 关于UltraEdit 15.* 的语法高亮-支持Matlab程序.m文件
- 解决Visual C++ 编译器中混合 .c 文件时收到 C1853 预编译头错误的方法 from http://live.aulddays.com/tech/08/c1853precompile/
- sql数据库安装到安装支持文件时崩溃
- 自动更新时,设置IIS MIME类型 支持apk和.ipa的文件下载
- asp.net neatUpload 支持大文件上传组件
- 让vs2005支持NVDIA CUDA的cu文件语法高亮显示
- VMware下 DOS7.1 中 运行.com文件出错的解决办法
- 图解Visual C++ 2010在说明文件中的简易部署
- uboot对jffs2文件系统的支持
- 如何让notepad++支持自定义文件的语法高亮
- [代码]Delphi实现获取文件及文件夹大小(支持超过2G的大文件)
- FAT32和NTFS最大支持的单个文件大小分别是多大?
- MVC框架实现文件的上传(支持多文件上传)
- IIS支持exe文件下载的配置方法
- 2个小问题:Struts2 国际化支持和下载文件的开发思路