Получение вывода с русскими буквами из rake

Следующей реальной проблемой является получение вывода, содержащего кириллицу. Можно конечно оформлять файлы в 866 кодировке, но это потенциальный геморрой. Есть UTF8 и на хостинге будет именно оно! Поэтому формулируем задачу следующим образом: сделать так, чтобы результаты прогона тестов и других задач, выполняемых через rake отображались корректно. Как добиться этого для стандартной виндовой консоли я не знаю. Но есть путь для того чтобы сделать это.

В предыдущей статье мы не зря установили Powershell. Теперь можно заставить ее сделать перекодировку. Хотя вызывает некоторую озабоченность тот факт, что Microsoft до сих пор не сделали аналога bash или хотя бы не прикрутили bash вместо своей убогой консоли.

Итак, по рецепту отсюда делаем следующее: 

печатаем в PowerShell текст

 

function ConvertTo-Encoding ([string]$From, [string]$To){
	Begin{
		$encFrom = [System.Text.Encoding]::GetEncoding($from)
		$encTo = [System.Text.Encoding]::GetEncoding($to)
	}
	Process{
		$bytes = $encTo.GetBytes($_)
		$bytes = [System.Text.Encoding]::Convert($encFrom, $encTo, $bytes)
		$encTo.GetString($bytes)
	}
}

Щелкаем энтер чтобы пустой строкой завершить ввод функции

А дальше делаем вот что: запускаем нашу задачу (я специально прописал для одной из задач русское описание, так что можно просто rake -T) и перенаправляем вывод на такую конструкцию:

 rake -T | ConvertTo-Encoding utf-8 cp866

Получаем полный порядок на выходе: русские буквы!

Для того, чтобы можно было не вводить функцию каждый раз при открытии шелла, можно создать в папке «Мои документы» папку WindowsPowerShell и в ней записать эту функцию в файле profile.ps1

При следующем запуске WindowsPowerShell должна уже иметь эту функцию. Если ругается на безопасность, нужно из админского профиля выполнить команду 

 Set-ExecutionPolicy RemoteSigned

И еще раз перезапустить шелл.

Конечно, если бы не необходимость тестировать поведение разрабатываемого приложения в IE незачем было бы городить весь огород с виндой. Но такая необходимость есть.

Перенаправление вывода я прописал в bat файле, который запускает тесты. В принципе, наверное можно как-то сделать проще и элегантней, но я не знаю как.

Ответить