繁体   English   中英

将gsub()模式从ruby 1.8转换为2.0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM