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

我们上回说到内存的分配,是通过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(" " "); 这样是不是就可以输出双引号了。

}

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容