cros_setup_toolchains: fix encoding in a few places

Read data as bytes for hashlib hashing, and capture program output
as UTF-8 when we want to parse it.

BUG=chromium:997354
TEST=`./run_tests` passes

Change-Id: I0469e0351eee0bc5d806c7d90aa8c22e5c50f63a
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1919668
Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/cros_setup_toolchains.py b/scripts/cros_setup_toolchains.py
index 8b80373..1d1cc9e 100644
--- a/scripts/cros_setup_toolchains.py
+++ b/scripts/cros_setup_toolchains.py
@@ -155,7 +155,8 @@
     script = os.path.abspath(__file__)
     if script.endswith('.pyc'):
       script = script[:-1]
-    setup_toolchains_hash = hashlib.md5(osutils.ReadFile(script)).hexdigest()
+    setup_toolchains_hash = hashlib.md5(
+        osutils.ReadFile(script, mode='rb')).hexdigest()
 
     cls._CACHE = {
         'crossdev_version': crossdev_version,
@@ -227,7 +228,8 @@
         cmd.extend(['-t', target])
         # Catch output of crossdev.
         out = cros_build_lib.run(
-            cmd, print_cmd=False, redirect_stdout=True).output.splitlines()
+            cmd, print_cmd=False, redirect_stdout=True,
+            encoding='utf-8').stdout.splitlines()
         # List of tuples split at the first '=', converted into dict.
         conf = dict((k, cros_build_lib.ShellUnquote(v))
                     for k, v in (x.split('=', 1) for x in out))
@@ -641,7 +643,8 @@
         extra_env['ROOT'] = root
       cmd = ['%s-config' % package, '-c', target]
       result = cros_build_lib.run(
-          cmd, print_cmd=False, redirect_stdout=True, extra_env=extra_env)
+          cmd, print_cmd=False, redirect_stdout=True, encoding='utf-8',
+          extra_env=extra_env)
       current = result.output.splitlines()[0]
 
       # Do not reconfig when the current is live or nothing needs to be done.