我使用SAS在Windows機器上以utf8
編碼保存製表符分隔的文本文件。然後我試圖在R鍵打開此:擺脫SAS與R之間的BOM
read.table(myfile, header =TRUE, sep = "\t")
令我驚訝的是,數據是完全搞砸了,但只是偷偷摸摸。數值隨機變化,但總體佈局看起來很正常,所以我花了一段時間才發現問題,現在我假設的是BOM。
這當然不是一個新問題;他們解決這個問題簡單here,並推薦使用
read.table(myfile, fileEncoding = "UTF-8", header =TRUE, sep = "\t")
然而,這樣做毫無起色!我唯一的解決辦法是抑制頭,帶或不帶fileEncoding
說法:
read.table(myfile, fileEncoding = "UTF-8", header =FALSE, sep = "\t")
read.table(myfile, header =FALSE, sep = "\t")
在任何情況下,我必須做一些不道德的事,以取代第一行的列名,但只有在我刪除一些在第一列名稱開頭出現的BOM版本(<U+FEFF>
,如果我使用fileEncoding
和 
如果我不使用fileEncoding
)。
是不是有一個簡單的方法來刪除BOM並使用read.table
而沒有任何特殊的參數?
更新@Joe: 的SAS,我用:進一步怪事
FILENAME myfile 'C:\Documents ... file.txt' encoding="utf-8";
proc export data=lib.sastable
outfile=myfile
dbms=tab replace;
putnames=yes;
run;
更新:下面使用fileEncoding="UTF-8-BOM"
如@Joe在他的解決方案建議似乎去掉BOM。 但是,它並沒有解決我最初的激勵問題,這是數據中的腐敗問題;標題行很好,但奇怪的是,第一列數字的最後幾個數字會混亂。我會給喬信貸的答案 - 也許我的問題實際上不是BOM問題?
黑客解決方案:使用fileEncoding="UTF-8-BOM"
並且還包括參數colClasses = "character"
。不知道爲什麼這可以解決數據腐敗問題 - 可能是未來問題的主題。
你如何在SAS中寫出文件? – Joe
@Joe,查看有關問題的更新。 – zkurtz
我認爲UTF-8是不可協商的,而不是SAS會話的編碼? – Joe