[英]Converting gsub() pattern from ruby 1.8 to 2.0
我有一个ruby程序,我正在尝试将表单ruby 1.8升级到ruby 2.0.0-p247。
这在1.8.7中运行得很好:
begin
ARGF.each do |line|
# a collection of pecluliarlities, appended as they appear in data
line.gsub!("\x92", "'")
line.gsub!("\x96", "-")
puts line
end
rescue => e
$stderr << "exception on line #{$.}:\n"
$stderr << "#{e.message}:\n"
$stderr << @line
end
但是在ruby 2.0下,当遇到96或92编码到数据文件中时,这会产生这种情况,否则该数据包含看似ASCII的内容:
invalid byte sequence in UTF-8
我已经尝试了各种方式:双反斜杠,使用正则表达式对象而不是字符串,force_encoding()等,并且我很难过。
任何人都可以为我填写丢失的拼图吗?
谢谢。
===============补充:2013-09-25 ============
将\\ x92更改为\\ u2019并未解决问题。
程序在输入文件中实际命中92或96之前不会出错,因此当数十万行输入数据与之匹配时,我对如何解决字符串中的字符模式感到困惑。没有事件的模式。
抛出异常的不是正则表达式,而是Ruby编译器。 \\x92
和\\x96
是你如何表示'
和–
在windows-1252编码中,但Ruby期望字符串是UTF-8编码的。 你需要\\x92
在字符串文字中放置像\\x92
这样的原始字节值的习惯。 非ASCII字符应由Unicode转义序列指定(在本例中为\’
和\–
)。
现在它是一个Unicode世界,不再考虑字节的文本,而是用字符来思考。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.