Index: /trunk/src/VBox/ValidationKit/common/utils.py
===================================================================
--- /trunk/src/VBox/ValidationKit/common/utils.py	(revision 70567)
+++ /trunk/src/VBox/ValidationKit/common/utils.py	(revision 70568)
@@ -381,5 +381,7 @@
     except:
         return sXcptRet;
-    return sRet.decode(sEncoding, 'ignore');
+    if hasattr(sRet, 'decode'):
+        sRet = sRet.decode(sEncoding, 'ignore');
+    return sRet;
 
 def readFile(sFile, sMode = 'rb'):
@@ -400,5 +402,5 @@
     except:
         sRet = sXcptRet;
-    if sEncoding is not None:
+    if sEncoding is not None and hasattr(sRet, 'decode'):
         sRet = sRet.decode(sEncoding, 'ignore');
     return sRet;
@@ -588,9 +590,16 @@
     Wrapper around subprocess.check_output to deal with its absense in older
     python versions.
-    Extra keyword: sEncoding='utf-8; for specifying now output is to be decoded.
+
+    Extra keywords for specifying now output is to be decoded:
+        sEncoding='utf-8
+        fIgnoreEncoding=True/False
     """
     sEncoding = dKeywordArgs.get('sEncoding');
     if sEncoding is not None:   del dKeywordArgs['sEncoding'];
     else:                       sEncoding = 'utf-8';
+
+    fIgnoreEncoding = dKeywordArgs.get('fIgnoreEncoding');
+    if sEncoding is not None:   del dKeywordArgs['fIgnoreEncoding'];
+    else:                       fIgnoreEncoding = True;
 
     _processFixPythonInterpreter(aPositionalArgs, dKeywordArgs);
@@ -607,5 +616,7 @@
         raise subprocess.CalledProcessError(iExitCode, asArgs);
 
-    return sOutput.decode(sEncoding);
+    if hasattr(sOutput, 'decode'):
+        sOutput = sOutput.decode(sEncoding, 'ignore' if fIgnoreEncoding else 'strict');
+    return sOutput;
 
 g_fOldSudo = None;
