C++程序中的三种编码
程序中的编码分类:
1.程序源⽂件编码
程序源⽂件编码是指保存程序源⽂件内容所使⽤的编码⽅案,该编码⽅案可在保存⽂件的时候⾃定义。
通常在简体中⽂windows环境下,各种编辑器(包括visual studio)新建⽂件缺省编码都是GB18030,所以不特别指定的
话,windows环境下的c++源⽂件的编码通常为GB18030(GB18030兼容GBK);在linux环境下,默认的为UTF-8编码。
2.c++程序内码
源程序编译后,c++中的字符串常量变成⼀串字节存放在可执⾏⽂件中,内码指的是在可执⾏⽂件中,字符串以什么编码进⾏存放。这⾥的字符串常量指的是窄字符(char)⽽不是宽字符(wchar_t)。宽字符通常都是以Unicode(VC使⽤UTF-16BE, gcc使⽤UTF-32BE)存放。
通常简体中⽂版的VC使⽤内码为GB18030,⽽gcc使⽤内码缺省为UTF-8,单可以通过-fexec-charset参数进⾏修改。(可以通过在程序中打印字符串中每个字节的16进制形式来判断程序使⽤的内码)。
3.运⾏环境编码
运⾏环境编码指的是,执⾏程序时,操作系统或终端所使⽤的编码。程序中输出的字符最终要转换为运⾏环境编码才能显⽰,否则就会出现乱码。
常⽤的简体中⽂版的windows环境编码是GB18030,linux下最常⽤的环境编码是UTF-8。
4.三种编码之间的关系
程序源⽂件【源⽂件编码】--->(编译器编译) ---->⽬标⽂件【程序内码】----> (运⾏后输出信息)---->输出【运⾏环境编码】
编译器需要正确识别源⽂件的编码,把源⽂件编译为⽬标⽂件,并把源⽂件中的以源⽂件编码的字符串转换为以程序内码编制的字符串保存在⽬标⽂件中。
如果源程序中的为窄字符串常量,则程序运⾏时,直接将⽬标⽂件中对应的内码字符串输出;若为宽字符串常量,则程序运⾏时c++标准库需要正确识别终端的运⾏环境编码,并把程序的输出转换为运⾏环境所使⽤的编码,以便正确显⽰。
源程序是指什么程序参考⽂章中还有代码⽰例,可以直接查参考⽂章
本⼈遇到的相关问题:
在windows下,当源⽂件的编码为UFT-8时,对路径中有中⽂的⽂件进⾏输出,会直接导致对⽂件的输出失败,但是并不会报错,也可以正常打开⽂件,只是⽆法输出数据。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论