ustrto函數將RTF中文亂碼打回原形

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 This is 實證研究結果par}" _n

rtfclose `handle"

以上命令在stata14中用rtfopen命令創建一個名為mytable的rtf文檔,用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字元的處理方式,其取值可為1、2、3和4,通常我們設置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 `=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元我們即可給您開具發票,發票類別為「諮詢費」。用心做事,只為做您更貼心的小爬蟲。第一批發票已經寄到各位小主的手中,大家快來給小爬蟲打賞呀~

文字編輯:強宇曦

技術總編:劉貝貝



推薦閱讀:

通過 HttpUrlConnection獲取遠程計算機上的文件
get請求和post請求對比
如何動態更改vue這種單頁面應用的頁面tittle?
解決macOS MATLAB 2017b 的編輯器中文亂碼——創建編碼名稱的別名

TAG:函數 | 亂碼 | 中文亂碼 | 中文 |