2015-11-08 2 views
2

В процессе чтения CSV-файла в массив я заметил, что самый первый элемент массива, который является строкой, содержит ведущую «».таинственный ведущий «пустой» символ в начале строки, которая поступает из файла CSV.

Например:

str = contacts[0][0] 
p str 

дает мне ...

"SalesRepName"

Тогда по чистой случайности мне довелось попробовать:

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

и что дало мне ...

["", "S", "a", "l", "e", "s", "R", "e", "p", " N "," a "," m "," e "]

Я проверил все остальные элементы массива, и это единственная строка, содержащая ведущие" ".

+1

Я честно не согласен с тем, что это закрыто как дубликат. Проблема в упомянутой статье не совсем такая, как эта. Если бы я столкнулся с этим во время моих исследований, я бы проигнорировал его, потому что это не объясняет проблему, которую я испытывал. Путем голосования по этому вопросу вы не согласны с публикацией ценной информации, которая потенциально может помочь другим людям, столкнувшимся с этой проблемой.Как я описал проблему/ответ, она фокусируется на симптоме. Меньше всего вы можете сделать это, чтобы опубликовать конкурирующий ответ, который объясняет, что происходит. – brianjason

+1

Тема ZERO WIDTH SPACE - это тот, где ответов не так много - http://www.verkltas.club/questions/tagged/zero-width-space?sort=votes&pageSize=15 Я не поклонник Zero Width Space, из-за того, что я считаю неравномерной обработкой почтовыми клиентами, веб-браузерами и текстовыми процессорами ... Этот раздел не должен быть закрыт. – 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 
} 

С , «г: 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! –