簡體   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