Существует ли приемлемый способ работы с регулярными выражениями в Ruby 1.9, для которых неизвестна кодировка ввода? Пусть говорят, что мой вход - это кодировка UTF-16:
x = "foo<p>bar</p>baz"
y = x.encode('UTF-16LE')
re = /<p>(.*)<\/p>/
x.match(re)
=> #<MatchData "<p>bar</p>" 1:"bar">
y.match(re)
Encoding::CompatibilityError: incompatible encoding regexp match (US-ASCII regexp with UTF-16LE string)
Мой текущий подход - использовать UTF-8 внутренне и перекодировать (копию) ввода, если необходимо:
if y.methods.include?(:encode) # Ruby 1.8 compatibility
if y.encoding.name != 'UTF-8'
y = y.encode('UTF-8')
end
end
y.match(/<p>(.*)<\/p>/u)
=> #<MatchData "<p>bar</p>" 1:"bar">
Однако для меня это немного неудобно, и я хотел спросить, есть ли лучший способ сделать это.