ustrto函数将RTF中文乱码打回原形

2017-04-13 余金鑫 爬虫俱乐部 爬虫俱乐部

stata13版本可以完美的实现在stata界面编写RTF文档,在之前的推文我们曾介绍过,详见关于RTF你不知道的命令关于RTF你不知道的命令之番外篇等。但若使用stata14版本,输出中文字符到RTF文档会出现乱码的现象,如:


clear all

set more off

tempname handle

rtfopen `handle' using c:/rtf/mytable.rtf,replace

file write `handle' "{\pard\b This is 实证研究结果\par}" _n

rtfclose `handle'

以上命令在stata14中用rtfopen命令创建一个名为mytablertf文档,用file write写入“This is 实证研究结果”这句话,可以发现只有中文部分出现了乱码。这是由于RTF文档可以识别stata13版本使用的gb2312中文编码,但无法识别 stata14版本使用的UTF-8 编码。


要解决stata14版本输出RTF文档的中文乱码问题,就需要对中文内容进行转码,即将UTF-8编码转为RTF文档可以识别的gb2312编码。ustrto()函数可以帮我们做到这一点。

基本语法:ustrto(s,enc,mode)


顾名思义,ustrto ()= UTF-8 String to… 它可以将以UTF-8编码的unicode字符串”s”转化为其他编码格式。在语法中,”enc”即表示需要转化成的其他编码格式;”mode”可以用来设置不被编码”enc”所支持的Unicode字符的处理方式,其取值可为1234,通常我们设置mode取值为1


比如将”café”这个字符串转为ascii编码,但字符“é”ascii无法支持的,”mode”的不同取值就代表处理”é”的不同方法:


01

mode取值为1,用编码的“替换字符”替换é”, ascii编码的替换字符为”char(26)”。char(26)实际上是一个控制字符,在stata中无法显示,只能显示为下图的小方框)



02

mode取值为2,跳过任何不受支持的字符。


03

mode取值为3,在第一个不受支持的字符处停止,只返回一个空字符串。


04

mode取值为4,用unicode转义字符替换”é”


因此,在stata14中,用ustrto()将”This is 实证研究结果字符串转化为gb2312编码后再写入RTF文档,即可解决实证研究结果中文内容乱码的问题。


那么,如何将file write命令和ustrto函数结合使用呢?只需将file write命令编辑的字符串s写成 `=ustrto(“s”,”enc”,”mode”)’的形式即可。(注意,ustrto部分要使用宏的引号 ` ’ 括起来)


命令如下:

clear all

set more off

tempname handle

rtfappend `handle' using c:/rtf/mytable.rtf, replace

file write `handle' "{\pard\b `=ustrto("This is 实证研究结果","gb2312",1)'\par}" _n

rtfclose `handle'

如上图所示,中文乱码的问题已经解决。


在之前的推文中,我们也曾介绍过用esttab输出实证研究结果到RTF文档:esttab命令输出回归分析结果到RTF文档。如果想为每个实证研究结果添加标题,可以用file write编辑,但更为简便的方法是,直接使用esttab命令的“title” 功能。title(string),括号里添加标题名即可。但如果标题中含有中文,在stata14中也会出现乱码现象,这时候结合使用ustrto()函数同样可以解决乱码问题。


sysuse auto, clear

estpost summarize price mpg rep78 foreign, detail

esttab using c:/rtf/mytable.rtf, title(`=ustrto("描述性统计结果","gb2312",1)’) cells("count mean(fmt(3)) p50 sd(fmt(2)) min max ") noobs append

如果想将字符串转为UTF-8编码的格式,可以使用ustrfrom()函数,用法和ustrto类似,有兴趣的读者可以通过help来进一步了解~

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


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

文字编辑:强宇曦

技术总编:刘贝贝



往期推文推荐:

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

2.关于RTF你不知道的命令

3.关于RTF你不知道的命令之番外篇

4.免费事件研究,一片片从邮局寄来

5.免费的股价同步性,一片片从邮局寄来

6.Stata叫你回家听音乐了!

7.一言不合就用stata写邮件(Outlook/Foxmail)

8.听说你想知道怎么用stata画地图?

9.I have a Stata, I have a python

10.I have a Stata, I have a Python之二——pdf转word


关于我们

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

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

投稿邮箱:statatraining@163.com

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

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号