Проблема кодирования строки Ruby - PullRequest
6 голосов
/ 19 февраля 2010

Я просмотрел другие посты, связанные с ruby ​​/ encoding, но не смог выяснить, почему следующее не работает. Скорее всего, только потому, что я плотный, но вот ситуация.

Использование Ruby 1.9 в Windows. У меня есть набор CSV-файлов, которым нужно добавить некоторые данные в конец каждой строки. Всякий раз, когда я запускаю свой сценарий, добавленные символы являются бредом. Вводимый текст выглядит как кодировка IBM437, а моя строка, которую я добавляю, начинается с US-ASCII. Ничто из того, что я пробовал в отношении принудительного кодирования входных строк или строки добавления, похоже, не влияет на результирующий вывод. Я в тупике. Текущая версия кодировки просто последняя, ​​которую я пробовал.

def append_salesperson(txt, salesperson)
  if txt.length > 2
    return txt.chomp.force_encoding('US-ASCII') + %(, "", "", "#{salesperson}")
  end
end

salespeople = Hash[
    "fname", "Record Manager"]

outfile = File.open("ActData.csv", "w:US-ASCII")

salespeople.each do | filename, recordManager |
  infile = File.open("#{filename}.txt")
  infile.each do |line|
    outfile.puts append_salesperson(line, recordManager)
  end
  infile.close
end
outfile.close

Ответы [ 3 ]

1 голос
/ 27 апреля 2010

Одна небольшая заметка, связанная с вашим вопросом, заключается в том, что у вас есть данные CSV как таковые %(, "", "", "#{salesperson}"). Здесь у вас есть пробел перед вашими двойными кавычками. Это может привести к тому, что #{salesperson} будет интерпретироваться как несколько полей, если в этом тексте есть запятая. Чтобы это исправить, между запятой и двойными кавычками не должно быть пробела. Пример: "this is a field","Last, First","and so on". Это одна маленькая ошибка, с которой я столкнулся при создании отчетов, предназначенных для просмотра в Excel.

В Общий формат и MIME-тип для файлов значений, разделенных запятыми (CSV) они описывают грамматику файла CSV для справки.

0 голосов
/ 22 апреля 2010

Звучит так, как будто данные CSV поступают в формате UTF-16 ... отсюда и путы отображаются как печатный символ (первый байт) плюс пробел (второй байт).кодирование ваших добавленных данных с .force_encoding(Encoding::UTF-16LE) или .force_encoding(Encoding::UTF-16BE)?

0 голосов
/ 20 февраля 2010

может быть txt.chomp.force_encoding ('US-ASCII') +% (, "", "", "# {salesperson.force_encoding ('нечто')}")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...