Как сравнить два файла PDF в Ruby - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь сравнить два PDF-файла, используя UTF-8, но я получаю сообщение об ошибке «Неверная кодировка» при выполнении кода ниже:

 encoding = 'utf-8'
 base_path = set_up
 tear_down do
   f1 = File.read("#{TMP_DIR}/#{current_file_name}", encoding: encoding)
   f2 = File.read("#{base_path}/#{expected_file_name}", encoding: encoding)
   expect(f1).to eql f2
 end

Я пытался использовать:

f1.force_encoding("UTF-8")
f2.force_encoding("UTF-8")

Я тоже пробовал:

f1.force_encoding("BINARY")

, но я получаю еще одну ошибку:

Encoding::CompatibilityError: incompatible character encodings: ASCII-8BIT and UTF-8

Ответы [ 2 ]

2 голосов
/ 25 февраля 2020

Вместо того, чтобы сравнивать файл как строки, я бы просто сравнил MD5 га sh:

require 'digest'

tear_down do
  md5_1 = Digest::MD5.file("#{TMP_DIR}/#{current_file_name}")
  md5_2 = Digest::MD5.file("#{base_path}/#{expected_file_name}")

  expect(md5_1).to eql md5_2
end
0 голосов
/ 26 февраля 2020

Спасибо @spickermann за вашу помощь, это отлично работает для меня после удаления diff "CreationDate" между двумя файлами pdf:

base_path = set_up
tear_down do
  md5_1 = `cat "#{TMP_DIR}/#{current_file_name}" | grep -a -v "/CreationDate" | md5sum`.strip
  md5_2  = `cat "#{base_path}/#{expected_file_name}" | grep -a -v "/CreationDate" | md5sum`.strip
  expect(md5_1).to eql md5_2
end
...