美文网首页
简答明了的字符编码,所有编程语言可用到的知识点

简答明了的字符编码,所有编程语言可用到的知识点

作者: 手撕小黄鸡 | 来源:发表于2019-06-25 09:00 被阅读0次

    我们上回说到内存的分配,是通过CPU加载器处理硬件内存,但是没有提到内存地址,我在这里补充点,内存地址分为真实地址和虚拟地址,我们电脑中运行的都是虚拟地址,而真实地址并不直接用于电脑的使用,而是使用需要CPU进行处理后得到的虚拟地址。这个具体原因会在后面的指针中给大家说个明白。

    可能有朋友用过我第一节内容中提到的vs code,在完全安装好后,想要在输出时输出汉语,但是一经编译发现,怎么出来的是乱码。

    大家都知道,大多数国家都有自己的语言,电脑也是,电脑的语言现在只有一个,就是那一大串的0和1,而在编写代码的时候,我们使用的人类的语言,为什么它们能够互通呢,我就举例子说明:我们去国外的时候,往往会听不懂外国友人在说些什么,这时候,我们就要随身带着一个翻译软件,或者一个翻译工作者,他们通过汉语和英语的对照表,就可以明白其他人在说什么。所以人类和电脑的交流也是这样,如果使用电脑语言0和1来编程,可能大部分程序员就很头疼,看不懂,也不知道怎么用。但是如果用人类的语言,那么电脑就压根不识别。所以这个时候,人们就发明了计算机语言对照表,也就是我们常说的编码。

    具体是怎么用的,我们还是通过例子说明,我们把这些二进制数字当做一个编号,把我们常用的 “a"看做学生,这样就可以一个编号代表一个学生。我们喊到1号学生的时候,是不是就对应到a同学了。而电脑一个道理,当我们在编辑器中是用“a”的时候,编译器在编译阶段就会编译成0110 0001了,这中对应关系就是我们常说的字符集。

    严格的来说,编码并不是字符集,字符集是并不是字符编码,字符集就像我说的对照表,只是纯粹的二进制和常用字符的关系。而编码是将字符集中的字符取出来,并编码成电脑语言中对应二进制数的过程。

    理解了基础知识,然后我们就说说出现乱码的问题:

    由于电脑最开始出现在美国,但是人却无法有效的使用电脑,所以美国人自然就以自己的语言为标准,创造了ASCII编码,而这套编码中没有汉字。但是随着技术的进步,ASCII码就无法满足人类的需求,所以就出现了其他的编码形式,Unicode码,utf-8等,uft-8是Unicode的可变长度的升级,支持所有语言,所以也被称为万国码,而vs code 默认就是uft-8编码。

    这里问题就来了,为什么vs code 用utf-8编码,但是在编译后还会出现乱码。这时候,我们就要注意了,编码一般分为两种形态,源文件形态和编译形态,我们在写代码的时候,编辑器使用的是utf-8,所以我们输入汉字的时候发现不会出现乱码。但是在编译时,编译器可用的可不是uft-8了。编译器一般是根据我们系统的编译模式进行编译的,我的电脑是Windows10系统,其编码格式是gbk,这下明白了吗,用gbk去编译utf-8,不出现错误才怪。最后就是请不要纠结为什么英文没有错误,而中文有错误。原因就是编码出现的那一天,就是英文的,其他编码格式都是在这个基础上进行扩展的。

    我们既然明白了这其中的原因,就来修改吧,方法有两种:

    第一种是暂时的,我们点击右下角有个utf8的按钮,点击后上方搜索框会出现很多编码,向下滑,找到simplified Chinese(gbk)后选中即可。

    第二种是改变编辑器的编码:打开左上角文件,选择首选项,然后选择设置,然后选择文本编辑器,选择文件,然后就可以看到Files:Encoding选项,在下拉框中勾选GBK选项即可。这种方式是一劳永逸的方法。

    首选项-》设置

    设置完成后,重启vs code ,我们再F5运行代码试试。这下就是中文的了。

    我们了解了字符集,那么我们如何使用字符集呢:

    字符集中的常用字符我们平时都可以在C语言中直接使用,比如a、你好、123等,我们在编写代码的时候可以直接写出来。但是,既然它有对应的编码值,我们是不是可以使用编码值来表示,答案是肯定的,有个小问题是,我们在使用这些编码值的时候如果直接写为:“68”的话,编译后,它仍然是68,所以我们想要正确的使用编码值,就需要知道这个数字是八进制还是十六进制,然后分别在数字前面加上“”和“\x”的转义符号,然后就会正常的输出为字母“h”了。

    当然,我们在输出的时候,不只会遇到这些问题,即便我们正常的使用编码,但是还是会遇到:输出值往往会在一行显示,没有换行,不能输出特殊的双引号等现象,这是因为C语言中对这些符号进行了特殊的定义,所以不能直接表示。为了能够使用这些特殊符号,我们往往在这些符号前面加上转义字符“”来使用,比如下面就可以直接输出双引号,换行可以用“\n”等。

    #include

    int main(int argc, char const *argv[])

    {

        puts(" " "); 这样是不是就可以输出双引号了。

    }

    就我个人而言,这些特殊字符最好死记硬背下来,因为在编程过程中,这些都是经常用到的。

    相关文章

      网友评论

          本文标题:简答明了的字符编码,所有编程语言可用到的知识点

          本文链接:https://www.haomeiwen.com/subject/iapzqctx.html