2015-11-08 81 views
2

在將CSV文件讀入數組的過程中,我注意到第一個數組元素是一個字符串,它包含一個前導「」。來自CSV文件的字符串開頭的神祕領先「空」字符

例如:

str = contacts[0][0] 
p str 

給我...

「SalesRepName」

然後純屬偶然,我碰巧嘗試:

str = contacts[0][0].split(//) 
p str 

an d,給我...

[「」,「S」,「a」,「l」,「e」,「s」,「R」,「e」,「p」, 「N」,「一個」,「M」,「E」]

我已經檢查所有其他元素的數組中,這是具有包含前導「」的字符串的唯一的一個。

+1

我誠實地不同意這被封閉作爲重複。引用文章中的問題與此不完全相同。如果我在研究期間遇到它,我會忽略它,因爲它沒有解釋我遇到的問題。通過對這個問題進行投票反對,您會阻止我發佈有價值的信息,這可能會幫助遇到同樣問題的其他人。我描述問題/答案的方式主要關注症狀。你能做的至少是發佈一個解釋發生了什麼的競爭性答案。 – brianjason

+1

ZERO WIDTH SPACE的主題是沒有太多答案的地方 - http://www.verkltas.club/questions/tagged/zero-width-space?sort=votes&pageSize=15 我不是零寬度空間,因爲我認爲是電子郵件客戶端,網絡瀏覽器和文字處理器的不統一處理... 不應該關閉此主題。 – Xofo

回答

4

現在,在我發佈這個問題之前,我偶然發現了答案。顯然,我寫這個問題的行爲給了我確定這個字符的ascii數字的想法。

str = contacts[0][0].split(//) 
p str[0].codepoints 

給我

[65279]

在詢問ASCII字符65279我發現這篇文章: https://stackoverflow.com/a/6784805/3170942

根據SLaks:

這是一個零寬度的不間斷空間。它更常用作 字節順序標記(BOM)。

這反過來又促使我這裏的解決方案: https://stackoverflow.com/a/7780559/3170942
在此迴應,克努特提供了一個很好的解決方案,它是這樣的:

File.open('file.txt', "r:bom|utf-8"){|file| 
    text_without_bom = file.read 
} 

隨着,「R: bom | utf-8「是我正在尋找的關鍵元素。 所以我把它adapated我的代碼,這成了這樣:

CSV.foreach($csv_path + $csv_file, "r:bom|utf-8") do |row| 
    contacts << row 
end 

我花了幾個小時就這個愚蠢的問題。希望這會爲你節省一些時間!

+1

根據此頁面,我使用CSV庫來解析文件:http://ruby-doc.org/stdlib-2.2.3/libdoc/csv/rdoc/CSV.html
我不理解您的問題用我原來的問題和隨後的回答 – brianjason

+0

謝謝@holaymolay! –