Ruby 2.6.3.
Я пытался разобрать объект StringIO
в экземпляр CSV
с кодировкой bom|utf-8
, чтобы символ спецификации (нежелательный) был удален исодержимое кодируется в UTF-8:
require 'csv'
CSV_READ_OPTIONS = { headers: true, encoding: 'bom|utf-8' }.freeze
content = StringIO.new("\xEF\xBB\xBFid\n123")
first_row = CSV.parse(content, CSV_READ_OPTIONS).first
first_row.headers.first.include?("\xEF\xBB\xBF") # This returns true
Очевидно, кодировка bom|utf-8
не работает для StringIO
объектов, но я обнаружил, что она работает для файлов, например:
require 'csv'
CSV_READ_OPTIONS = { headers: true, encoding: 'bom|utf-8' }.freeze
# File content is: "\xEF\xBB\xBFid\n12"
first_row = CSV.read('bom_content.csv', CSV_READ_OPTIONS).first
first_row.headers.first.include?("\xEF\xBB\xBF") # This returns false
Учитывая, что мне нужно работать с StringIO
напрямую, почему CSV
игнорирует кодировку bom|utf-8
?Есть ли способ удалить символ спецификации из экземпляра StringIO
?
Спасибо!