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