软件编程含有中文的编码问题

Posted retry

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件编程含有中文的编码问题相关的知识,希望对你有一定的参考价值。

SI与codeblocks编码设置

技术图片

1、以UTF-8格式打开源码文件,并将UTF-8格式作为默认的编码模式。

情况一:源文件的格式为UTF-8(str="中文")
codeblocks的打开格式、保存格式、代码解析格式、内码编码格式、与设置一致,解析输出不能看到准确的汉子,这取决操作系统,因为国内windows操作系统cmd的输出是gbk,所以会有乱码,但是可以将编码的hex打印出来,就可以看到其内码格式为UTF-8。
代码解析:即编辑器对c/c++这些语言的解析。
情况二:源文件不是UTF-8
code blocks尝试以UTF-8去打开时,发现解析不了,那么就会以另一种格式去解析,
(中文解析格式替换出现在任何地方,不仅仅是注释,str=中文的话,也会出错)
技术图片
技术图片
此时codeblocks的打开格式、保存格式、代码解析格式、内码编码格式等不可预料,所以不能允许出现此类情况。

解决方式:
1、Edit-File_reload,重新reload定义该文件的编码格式,将原先解析错误的字符删除,重新输入,并保存。
举例:如果源文件编码格式为ASNI且包含有中文,codeblock()设置为UTF-8,没有设置GBK)打开后会以另一种不可预料的格式解析,此时中文就会乱码。即使通过file_reload,重新将文件编码格式定位为ASNI也解决不了乱码情况,(已经不可逆)。
2、使用notpad++,将文件格式转为UTF-8,将原先解析错误的字符删除,重新输入,并保存。

gbk与utf-8设置同样的道理。

问题:
若code blocks不指定解析内码的编码格式,那么会有一个严重的问题,当一个工程中的两个源文件,一个是utf8,一个gbk,那么在中文在内码的保存上1个是3个字节,1个是两个字节;
utf8保存的是utf8的内码,gbk保存的是gb2312的编码。
技术图片

codeblock若不指定gcc的编译参数,其内码的解析格式与源文件的格式保持一致。vs编译器内码的解析格式与源文件的格式无关,与操作系统一致,始终为gbk。

si

默认编码模式,指的是对某一文件进行,编辑时文字以哪种方式进行保存,一旦编辑了文件,改文件就会以该编码模式进行保存。

若只是查看,reload只是临时更改了,编码方式。若编辑则会按照设置的编码模式更改源文件的编码方式。

vs
//新建
默认创建新建的文件编码方式为gb2312,这可以从高级系统设置中查看,默认都是第一个就是gb2312.

此时若在vs创建了文件,也可以通过更改高级设置,更改编码方式,我们一般只用到utf8与gb2312

//添加现有文件
若现有文件为gbk,没有问题

若文件为utf8编码,可能会出现乱码,错误现象,将下属打钩即可,导入进来的新的utf8文件,可从高级文件设置中看到变为了unicode,并不是之前默认的gb2312了。
技术图片

若此时中文乱码问题解决了,但是编译时候出现下述问题,请参考以下解决方案:
https://blog.csdn.net/qq_36226393/article/details/77725493

https://blog.csdn.net/lcb_coconut/article/details/76136725

https://blog.csdn.net/yanchenyu365/article/details/84065719
//注意的是:不论vs工程中文件本身的编码格式是什么,内码都是以操作系统的gbk编码进行存储。

强烈建议在windows下编码时所有文件的编码方式都改gbk,

若是编写linux下应用程序,文件编码方式全部都为utf8

以上是关于软件编程含有中文的编码问题的主要内容,如果未能解决你的问题,请参考以下文章

cmd显示编码gbk不可映射字符

组件化编程

PHP编码规范

php编码规范

java编程题

后端返回URL含有中文进行编码、解码处理