diff --git a/lib/overcommit/subprocess.rb b/lib/overcommit/subprocess.rb
index <HASH>..<HASH> 100644
--- a/lib/overcommit/subprocess.rb
+++ b/lib/overcommit/subprocess.rb
@@ -51,7 +51,7 @@ module Overcommit
         err.rewind
         out.rewind
 
-        Result.new(process.exit_code, out.read, err.read)
+        Result.new(process.exit_code, to_utf8(out.read), to_utf8(err.read))
       end
 
       # Spawns a new process in the background using the given array of
@@ -83,6 +83,23 @@ module Overcommit
         %w[cmd.exe /c] + [args.join(' ')]
       end
 
+      # Convert string from current locale to utf-8
+      #
+      # When running commands under windows the command output is using
+      # current system locale (depends on system lanuage) not UTF-8
+      #
+      # @param process [String]
+      # @return [String]
+      def to_utf8(string)
+        if Encoding.locale_charmap == 'UTF-8'
+          return string
+        end
+
+        ec = Encoding::Converter.new(Encoding.locale_charmap, 'UTF-8')
+        # Convert encoding, alternatively simple: string.scrub will suffice
+        ec.convert(string)
+      end
+
       # @param process [ChildProcess]
       # @return [Array<IO>]
       def assign_output_streams(process)
Fix encoding of process output under windows (#<I>)

* Fix encoding of process output under windows



Output of commands under windows is not UTF-8 by default, this

can lead to "invalid byte sequence in UTF-8" error on sylink check



* Fix coding style



* Fix invalid converter setting (UTF-8 to UTF-8)