20 июня 2012 г.

Ruby, регулярные выражения и Windows XP


Ruby хоть и является одним из наикроссплатформейших языков общего назначения с которыми мне приходилось работать, но в нем то и дело спотыкаюсь о грабли ее реализации на разных платформах.
Так сегодня мне потребовалось написать скрипт на ruby, который должен был запускаться на Windows XP (При этом я еще хотел его запускать дома, уже на Linux).  Проблема заключалось в том что регулярные выражения, которые я применял к импортируемому тексту из стороннего файла напрачь не работали. Как заведено, в опенсорсе, раскажу о своей проблеме и как ее решал, кому нибудь пригодиться.
Что было:
  • Windows XP
  • ruby (MRI v1.9.3)
  • Большой текстовый файл в кодировке utf-8, почти все содержимое набрано кириллицей.
Соответственно требовалось написать консольный скрипт, который бы потрашил этот злополучный файл регулярными выражениями. Регулярные выражения, конечно же были с модификатором "u", ибо содержали все бе кириллические символы.
Как иследовало ожидать проблемы в Windows XP были в двух кодировках. Консоль в Windows XP в IBM866 (соответственно импортируемый текст тоже был в ней), сам файл в utf-8.

Вообщем пришел к такому варианту:
# coding: utf-8
# Попутно, в Windows, импортированный utf-8 текст (через File) будет в utf-8 (а не IBM866)
Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'
# регулярное выражение:
FIOPATTERN=/^Имя:\s*([^\n^\r]+)/u

Комментариев нет:

Отправить комментарий