如何比较 Ruby 中的两个 PDF 文件
How to compare two PDF files in Ruby
我正在尝试使用 UTF-8 比较两个 PDF 文件,但在执行以下代码时出现错误 "Invalid encoding":
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
我不会将文件作为字符串进行比较,而只是比较文件的 MD5 哈希值:
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
谢谢@spickermann 的帮助
删除 2 个 pdf 文件之间的差异 "CreationDate" 后,这对我来说工作正常:
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
我正在尝试使用 UTF-8 比较两个 PDF 文件,但在执行以下代码时出现错误 "Invalid encoding":
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
我不会将文件作为字符串进行比较,而只是比较文件的 MD5 哈希值:
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
谢谢@spickermann 的帮助 删除 2 个 pdf 文件之间的差异 "CreationDate" 后,这对我来说工作正常:
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