查看原文
其他

识得庐山真面目—转码方法总结

司海涛 Stata and Python数据分析 2022-03-15

       有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

     喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~


  

 好消息

爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!


在推文再谈乱码问题中,我们给大家介绍了什么是乱码?为什么产生乱码?以及什么是转码等问题。并且在推文朝花夕拾 | 识得庐山真面目—unicode命令中详细的介绍了如何使用unicode命令进行转码。今天小编再给大家介绍两种常用转码的方法。

      我们以新浪财经高管任职数据的源代码为例,用copy命令抓取其网页源代码:

copy"http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/600900.phtml" temp.txt, replace

接着我们用Sublime Text打开temp.txt这个文本文档。

charset 属性规定在外部脚本文件中使用的字符编码,由上图可知该文本文件的编码为gb2312,现在如果直接将其读入Stata15,将会发生乱码。

那么要解决这个乱码问题,就需要对文件进行转码,即由gb2312编码转为utf-8编码。

转码方法一:unicode进行转码

程序如下:

clear

unicode encoding set gb18030

unicode translate temp.txt, transutf8

unicode erasebackups, badidea

infix strL v 1-100000 using temp.txt, clear

关于unicode命令转码的方法在推文朝花夕拾 | 识得庐山真面目—unicode命令中已经进行了详细的介绍,这里不再赘述。

转码方法二:import delimited输入编码

       import delimited命令在推文用infix读入不完整?用import delimited试试吧中已经详细介绍了它的用法,这里着重强调一下encoding("encoding")这个选项,其可以指定要导入的文本文件的编码。比如说我们知道上述temp.txt文件的编码为gb2312。我们用import delimited读入的时候就可以用encoding("gb2312")指定文件的编码,这样就可以避免乱码的产生。这里需要注意的是,gb2312是汉字的一种编码,常见的汉字编码还有GBK、gb18030。那么它们有什么区别呢?

      GB 2312是中国国家标准简体中文字符集,是对 ASCII 的中文扩展。。GB 2312 标准共收录 6763 个汉字,其中一级汉字 3755 个,二级汉字 3008 个;同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的 682 个字符。对于人名、古汉语等方面出现的罕用字,GB 2312 不能处理,这导致了后来 GBK 及 GB 18030 汉字字符集的出现。

      GBK即汉字内码扩展规范,K 为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。GBK 共收入 21886 个汉字和图形符号,GBK 向下与 GB 2312 完全兼容,向上支持 ISO 10646 国际标准,在前者向后者过渡过程中起到的承上启下的作用。

      GB18030,全称:国家标准 GB 18030-2005《信息技术中文编码字符集》,是中华人民共和国现时最新的内码字集,GB 18030 与 GB 2312-1980 和 GBK 兼容,共收录汉字70244个。

      它们的关系可以用下图表示:

所以在设置文件的编码时,汉字的编码最好设置为gb18030,当设置为gb2312时,有些字符会转码时会出现错误。

copy"http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/600900.phtml" temp.txt, replace

import delimited using temp.txt, clear delimiters("faufqnw25fe1w1gw,eo;g,1j3o", asstring) encoding("gb18030")

转码方法三:读入后使用ustrfrom()函数

copy"http://vip.stock.finance.sina.com.cn/corp/go.php/vCI_CorpManager/stockid/600900.phtml" temp.txt, replace

infix strL v 1-100000 using temp.txt, clear

ustrfrom()函数可以将其他编码类型的字符串转为UTF-8编码的字符串。其基本语法为:

ustrfrom(s,enc,mode)

其中,“enc”即表示需要转化为utf-8编码的编码类型;”mode”用来设定字符串s中无效字节序列的处理方式,其取值可为1、2、3和4,通常我们设置mode取值为1。

replace v = ustrfrom(v, "gb18030", 1)

这样就通过ustrfrom()函数实现了gb18030编码到utf-8编码的转换,解决了乱码的问题。

今天的内容就到这里,总结一下,常见转码的方法有三种:第一,用unicode命令;第二,用import delimited读入文件时,指定要导入的文本文件的编码;第三,用ustrfrom()函数将字符串由其他编码类型转换为utf-8编码。这三种方法都可以实现转码,解决乱码问题。


注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过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分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

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

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