ruby - 如何在 ruby​​ 中创建一个带有 "bad encoding"的字符串?

标签 ruby character-encoding

我在生产环境的某个地方有一个我没有访问它的文件,当由 ruby​​ 脚本加载时,针对内容的正则表达式失败并返回 ArgumentError => invalid UTF-8 中的字节序列

我相信我有一个基于这里所有要点的答案的修复:ruby 1.9: invalid byte sequence in UTF-8

# Remove all invalid and undefined characters in the given string
# (ruby 1.9.3)
def safe_str str

  # edited based on matt's comment (thanks matt)
  s = str.encode('utf-16', 'utf-8', invalid: :replace, undef: :replace, replace: '')
  s.encode!('utf-8', 'utf-16')
end

但是,我现在想构建我的 rspec 来验证代码是否有效。我无权访问导致问题的文件,因此我想以编程方式创建一个编码错误的字符串。

我已经尝试过类似的变体:

bad_str = (100..1000).to_a.inject('') {|s,c| s << c; s}
bad_str.length.should > safe_str(bad_str).length

或者,

bad_str = (100..1000).to_a.pack(c*)
bad_str.length.should > safe_str(bad_str).length

但是长度总是一样的。我也尝试过不同的字符范围;并不总是 100 到 1000。

关于如何在 ruby​​ 1.9.3 脚本中构建具有无效编码的字符串有什么建议吗?

最佳答案

大量单字节字符串将构成无效的 UTF-8 字符串,从 0x80 开始。所以 128.chr 应该可以工作。

关于ruby - 如何在 ruby​​ 中创建一个带有 "bad encoding"的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18235301/

相关文章:

mysql - Rails 3 自动创建联接表关联

json - 使用 Python 从 Json 文件中读取和写入 Unicode 字符

java - servlet中的编码问题

php - 使用不同的字符集搜索数据库

python - 从 Python 中的字符串中删除所有十六进制字符

shell - sed(和其他)会破坏非 ASCII 文件吗?

ruby - 为什么 bundler 使用多个 gem 位置?

Ruby 获取 UDPSocket 端口号

ruby-on-rails - 如何使用 strptime 将以毫秒为单位的时间戳字符串转换为时间对象

Java 与 Ruby HMAC SHA256 不一致