diff --git a/common/preproc.py b/common/preproc.py
index 9612921..15f0ecf 100755
--- a/common/preproc.py
+++ b/common/preproc.py
@@ -164,7 +164,7 @@
             newkeys.append(keyword)
     return newkeys
 
-def runpp(keys, keyrex, defines, ccomm, incdirs, inputfile, ofile):
+def runpp(keys, keyrex, defines, ccomm, utf, incdirs, inputfile, ofile):
 
     includerex = re.compile('^[ \t]*#include[ \t]+"*([^ \t\n\r"]+)')
     definerex = re.compile('^[ \t]*#define[ \t]+([^ \t]+)[ \t]+(.+)')
@@ -196,7 +196,10 @@
 
     ifile = False
     try:
-        ifile = open(inputfile, 'r')
+        if not utf:
+            ifile = open(inputfile, 'r')
+        else:
+            ifile = open(inputfile, 'r', encoding='utf-8', errors='replace')
     except FileNotFoundError:
         for dir in incdirs:
             try:
@@ -488,7 +491,10 @@
                 break
                 
         # Output the line
-        print(line, file=ofile, end='')
+        if not utf:
+            print(line, file=ofile, end='')
+        else:
+            ofile.write(line.encode('utf-8'))
 
     if ifblock != -1 or ifstack != []:
         print("Error:  input file ended with an unterminated #if block.", file=sys.stderr)
@@ -535,6 +541,7 @@
     incdirs = []
     ccomm = False
     quiet = False
+    utf = False
     for item in options:
         result = item.split('=')
         if result[0] == '-help':
@@ -544,6 +551,8 @@
             ccomm = True
         elif result[0] == '-quiet':
             quiet = True
+        elif result[0] == '-utf8':
+            utf = True
         elif result[0][0:2] == '-I':
             incdirs.append(result[0][2:])
         elif result[0][0:2] == '-D':
@@ -557,7 +566,7 @@
             keys.append(keyword)
             keys = sortkeys(keys)
         else:
-            print('Bad option ' + item + ', options are -help, -quiet, -ccomm, -D<def> -I<dir>\n')
+            print('Bad option ' + item + ', options are -help, -quiet, -ccomm, -utf8, -D<def> -I<dir>\n')
             sys.exit(1)
 
     if not os.path.isfile(inputfile):
@@ -567,7 +576,10 @@
             sys.exit(0)
 
     if outputfile:
-        ofile = open(outputfile, 'w')
+        if not utf:
+            ofile = open(outputfile, 'w')
+        else:
+            ofile = open(outputfile, 'wb')
     else:
         ofile = sys.stdout
 
@@ -581,7 +593,7 @@
 
     keys = sortkeys(keys)
 
-    runpp(keys, keyrex, defines, ccomm, incdirs, inputfile, ofile)
+    runpp(keys, keyrex, defines, ccomm, utf, incdirs, inputfile, ofile)
     if ofile != sys.stdout:
         ofile.close()
 
diff --git a/common/staging_install.py b/common/staging_install.py
index 7f4f15e..ac977f7 100755
--- a/common/staging_install.py
+++ b/common/staging_install.py
@@ -117,9 +117,9 @@
         elif os.path.isdir(filepath):
             total += filter_recursive(filepath, stagingdir, finaldir)
         else:
-            with open(filepath, 'r') as ifile:
+            with open(filepath, 'r', encoding='utf-8', errors='replace') as ifile:
                 try:
-                    flines = ifile.read().splitlines()
+                    flines = ifile.readlines()
                 except UnicodeDecodeError:
                     print('Failure to read file ' + filepath + '; non-ASCII content.')
                     continue
@@ -128,11 +128,11 @@
             makeuserwritable(filepath)
 
             modified = False
-            with open(filepath, 'w') as ofile:
+            with open(filepath, 'wb') as ofile:
                 for line in flines:
                     newline = line.replace(stagingdir, finaldir)
                     newline = newline.replace(stagingparent, localparent)
-                    print(newline, file=ofile)
+                    ofile.write(newline.encode('utf-8'))
                     if newline != line:
                         modified = True
 
