查看原文
其他

识得庐山真面目—详解ASCII编码

王悦 Stata and Python数据分析 2022-03-15

      哈喽大家好,酷暑来袭,和天气一样炽热的还有我们爬虫俱乐部每天新鲜出炉的推文哦,今天要给大家介绍的是我们的老朋友——ASCII编码。江湖规矩,首先还是先给大家简单介绍一下什么是ASCII。

一、什么是ASCII编码

在计算机中,所有的数据在存储和运算时都要使用二进制数表示,而ASCII编码统一规定了常用符号应该用哪些二进制数来表示。它分为两个集合:128个字符的标准ASCII码和128个字符的扩展ASCII码。标准ASCII 码用来表示所有的大写和小写字母,数字0到9,标点符号以及在美式英语中使用的特殊控制字符,比如空格"SPACE"是32(二进制00100000),大写的字母A是65(二进制01000001)。英语用128个符号编码就够了,但是用来表示其他语言,128个符号是不够的,于是就有了扩展ASCII码,其扩充出来的符号包括表格符号、希腊字母和特殊的拉丁符号。

此外附上一个小小的友情提示:从stata14开始用的是UNICODE(统一码、万国码)编码,而ASCII编码存在于stata13及更低版本中,关于两者的转化问题,在我们之前的文章有过详细的介绍《嘿,我才不怕不一样的编码小怪兽


二、如何快速查到ASCII编码

ASCII编码一共对应着256个字符,其中包括字母数字符号等等,一一记住似乎不太可能,那么当我们需要利用ASCII编码时有什么办法能让我们快速get到呢,机智的stata给我们提供了解决办法:ascii命令

此时只需要直接在命令框中输入:ascii

就可以得到下图:

从输出的结果我们可以看到ASCII码是从33开始的,这是因为 ASCII表上的数字0–31分配给了控制字符,此外编码32代表空格键,编码127代表删除键,均为不可显字符,所以无法显示。这样一来我们就可先将ASCII编码(二进制)换成十进制,再对应ascii命令输出的结果,轻松查到编码对应的字符。


三、如何快速查询ASCII字符映射表

学习过了命令ascii,是不是觉得如果ASCII编码以表格的形式表现出来更加简洁方便呢,这个时候asciiplot命令就派上用场啦。

  首先我们需要安装命令asciiplot:ssc install asciiplot

  这个命令的用法很简单,直接在命令框中输入:asciiplot

  利用它我们就可以在stata13中快速得到ASCII字符映射表,另外需要注意的是,如果是在stata14及更高版本中执行这个命令,表中编码127-160对应的字符为空白,读者可自行尝试,stata13中执行结果如下图:

表中横行代表个位数,竖行代表十位数和百位数,可以看到ASCII字符映射表和由ascii命令得到的ASCII编码是一样的,不同的是ASCII字符映射表看上去更直接更美观。


四、利用char()函数返回字符

另一种情况是我们想直接知道某个特定的编码对应的字符,这个时候char()函数就可以发挥作用了,它可以将括号里的ASCII编码转化成相应的字符,举个例子:

di char (110)

也就是说ASCII编码110对应的字符是小写字母n,需要注意的是,如果函数char()括号内的数字是128-255的话,在stata14及更高版本中是无法正常显示出来的(但是如果使用stata13仍然可以正常显示),我们可以通过help char()了解到:从stata14开始,我们使用的编码全部为UTF-8(UNICODE编码的一种实现形式),而char()函数括号中的数字若为128-255,则会成为一个无效的UTF-8数列,此时可用uchar()函数来解决,来看一个例子:

 di char(110)

 di uchar(110)

 di char(254)

 di uchar(254)

运行结果如图:

我们可以看到对于0-127的数字,函数char()和uchar()都是可以成功转化的,但是对于128-255的数字,只有函数uchar()才能正常显示结果。所以以后可利用uchar()代替char()对128-255数字进行转码。

到这里我们还不能看出来char()函数到底有什么具体的用处,下面再以auto数据给大家举个“栗子”,假设数据中有一个变量名为mþg,我们要画出mþg与weight的散点图,由于mþg中的拉丁字母þ在键盘上无法找到,此时可以使用字符映射图来识别拉丁字母þ的代码,在具有西欧编码的计算机上,ASCII码为254,所以使用函数uchar(),程序如下:

sysuse auto,clear

rename mpg mþg

asciiplot

local th=uchar(254)

scatter m`th'g weight

这样原本在键盘上无法找到的拉丁字母,也可以轻松通过函数uchar()与局部宏的结合使用得到啦。以后遇到这种情况,千万不要忘记它们哦。


以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                     文字编辑:司海涛

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.用reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word(.docx)文档

7.Stata 15之Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shellout,open anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存