查看原文
其他

Unicode转义字符——编码与解码

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:于昊男,河南大学经济学院

本文编辑:谭   可

技术总编:李婷婷

Stata&Python云端课程来啦!

      为了感谢大家长久以来的支持和信任,爬虫俱乐部为大家送福利啦!!!Stata&Python特惠课程双双上线腾讯课堂~爬虫俱乐部推出了Python编程培训课程Stata基础课程Stata进阶课程。报名课程即可加入答疑群,对报名有任何疑问欢迎在公众号后台和腾讯课堂留言哦。我们在这篇推文的最后提供了每门课程的课程二维码,大家有需要的话可以直接扫描二维码查看课程详情并进行购买哦~

1.导 读

前几天有小伙伴在爬虫俱乐部的课程答疑群中提问Unicode转义字符的问题,那这篇推文我们就为大家介绍一下Unicode转义字符的编码与解码。

Unicode转义字符是以“\uXXXX”格式表示的字符,其中X为16进制数字,一般用数字0-9和字母A-F(或a-f)表示。Unicode转义字符是为了解决传统的字符编码方案的局限而产生的,能够使计算机实现跨语言、跨平台的文本转换及处理。Unicode字符在许多领域,尤其是Web前端开发中,有着广泛的应用。在进行网络爬虫过程中,我们有时也会遇到抓取的数据是以Unicode转义字符的形式出现,这时候我们就需要进行解码。在Stata中有ustrtohex(s[,n]) 和 ustrunescape(s) 两个函数可以实现Unicode转义字符的编码与解码。我们接下来分别简单介绍一下这两个函数的用法~
 2.命令介绍 

2.1 ustrtohex(s[,n]) 函数

ustrtohex(s[,n])为编码函数。当我们不指定n时,表示对字符s全部进行编码;如果指定了n(n>0),则表示将字符串s从第n个字符开始进行编码,转换成Unicode转义字符。具体要如何使用,我们引入一个例子来让大家理解。
我们将"爬虫俱乐部"进行编码,转换为unicode转义字符。
dis ustrtohex("爬虫俱乐部")

  接着,我们指定函数中的n为2,继续对"爬虫俱乐部"进行编码,转换为Unicode转义字符。
dis ustrtohex("爬虫俱乐部",2)

通过结果我们可以看出,当我们不指定n时会将"爬虫俱乐部"整体进行编码;当指定n为2时,则从"虫"字开始进行编码,相当于对"虫俱乐部"进行编码。

我们再举一个例子,看一下英文字母、数字和标点符号的编码。

dis ustrtohex("Hello 2022!")

  由结果我们可以看出,"Hello 2022!"在进行编码后,出现了11个Unicode转义字符。中间的\u0020,是空格的Unicode转义字符。需要注意的是,空格也是存在对应编码的,我们在进行操作的时候要注意空格的存在。

2.2  ustrunescape(s)函数

了解了如何编码后,我们再来介绍一下如何进行解码。ustrunescape(s)为解码函数。其表示将Unicode转义字符s进行解码。
我们将上面第一个例子得到的结果\u722c\u866b\u4ff1\u4e50\u90e8进行解码。
dis ustrunescape("\u722c\u866b\u4ff1\u4e50\u90e8")

可以看到,我们将Unicode转义字符进行解码转换成了汉字。在网页抓取数据,进行爬虫时,我们可能会遇到想提取的内容不是以汉字的形式呈现而是以Unicode转义字符呈现出来的。这时候,我们就需要对其进行解码,来获取我们想要的内容。

比如我们在推文开头提到的答疑群中小伙伴提出的问题,这里我们选取几个观测值来看一下怎样解决呢?

clear allinput str10 code str30 name"430047" "\u8bfa\u601d\u5170\u5fb7""430090" "\u540c\u8f89\u4fe1\u606f""430198" "\u5fae\u521b\u5149\u7535""430418" "\u82cf\u8f74\u80a1\u4efd"end

这里股票的名字全部是以Unicode转义字符串的形式出现的。现在,我们就可以用ustrunescape轻松解决这个问题。

replace name = ustrunescape(name) //将变量name中的Unicode转义字符解码替换为中文list

由结果看出,我们将变量"name"中的Unicode转义字符进行解码全部替换成了中文,这样我们就得到了每个股票代码对应的股票名字,获得了我们想要的内容。
 3.Unicode转义字符的应用

  Unicode转义字符也可以结合正则表达式使用。我们可以通过网址(http://www.qqxiuzi.cn/zh/hanzi-unicode-bianma.php)查询基础汉字及扩展汉字等的Unicode编码范围。

因为汉字的编码是连续的,可以通过定义区间,来匹配区间内任一的基本汉字。我们可以发现基本汉字Unicode转义字符的范围为\u4e00-\u9fa5,对应汉字为一-龥。通过Unicode转义字符,我们可以匹配任一Unicode编码区间内的任一字符。同时区间[\u4e00-\u9fa5] 也可以替换为 [一-龥]来匹配任一基本汉字。我们来看两个例子。
dis ustrunescape("\u4e00") //"\u4e00"是"一"字dis ustrunescape("\u9fa5") //"\u9fa5"是"龥"字

结合正则表达式替换函数,我们将"爬虫俱乐部"在[\u4e00-\u9fa5][一-龥]区间内进行匹配,将匹配到的字符替换为X:
dis ustrregexra("爬虫俱乐部", "[\u4e00-\u9fa5]", "X") dis ustrregexra("爬虫俱乐部", "[一-龥]", "X")

  当我们将区间缩小,缩小为[一-袗]区间,再次进行匹配:

dis ustrunescape("\u4e00") //"\u4e00"是"一"字dis ustrunescape("\u8897") //"\u8897"是"袗"字

dis ustrregexra("爬虫俱乐部","[\u4e00-\u8897]", "X")

可以看出,“部”字并没有替换成功。这是因为我们指定的区间内没有包含该字,所以匹配不到该字。这也进一步证明了汉字的编码是连续的。

以上就是本篇文章对Unicode转义字符编码与解码函数的介绍啦!欢迎大家一起交流学习!

END

最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。





腾讯课堂课程二维码





            


 对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!












往期推文推荐 

        徐州!徐州!

        B站弹幕爬虫——冬奥顶流冰墩墩&雪容融

        不会用Stata做描述性统计表?so easy!

        丰沛之地:备足姨妈巾

 过年啦,用Python绘制一幅属于你的春联吧!

       登上爬虫俱乐部“时光机” |上“机”出发 开启一段奇妙之旅

       【基础篇】查找并输出子字符串的定位

        Stata中的小清新命令——添加观测值

        PCA(主成分分析法)降维——Python实现

       超好用的事件研究法

        如何绘制任泽平《鼓励生育基金》的几幅图

        Python 第六天——字符串

        findname——想要什么找什么

        Python字符串之“分分合合”

        PDF转docx可批量操作?——wordconvert的小技巧

        考研之后,文科生需以“do”躬“do”!

       手绘五星兴家国——用Stata绘制五星红旗

        Seminar丨董事会的性别多样化和企业创新:来自国际的证据

       Python与数据库交互——窗口函数

        Stata之post命令——数据邮递 

        爬虫俱乐部成员的Stata学习经验分享来啦!

       Seminar丨2002年萨班斯·奥克斯利法案的经济后果

        我几乎画出了“隔壁三哥”家的国旗

        Python基础——三大数字类型,你都了解吗?
        如何用Stata绘制带指向性箭头标注的图像       
       Seminar丨荐仆贷款——19世纪中国的信任辅助贷款       【技能篇】多进程队列间通信

Seminar丨公司董事会的人才增长:来自中国的证据

正则表达式--懒惰模式

爬完独立董事的年薪,我的眼镜跌破了!识别旅游“照骗”——看风景名胜是否名副其实主成分分析的Python实现

正则表达式--贪婪模式

Seminar丨谁更重要:高管股权薪酬与财务报告欺诈DOS能量,超乎你想象!

关于我们 


   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



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

投稿邮箱:statatraining@163.com投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里
为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众
号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。



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

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