diff --git a/contrib/simplemerge b/contrib/simplemerge
index 5519697b71b33178d706cc76716565a76cd5db8a_Y29udHJpYi9zaW1wbGVtZXJnZQ==..b54d93fc3ba81899dbd9736dba4f2b286897ae35_Y29udHJpYi9zaW1wbGVtZXJnZQ== 100644
--- a/contrib/simplemerge
+++ b/contrib/simplemerge
@@ -41,8 +41,8 @@
     """Exception raised on errors in parsing the command line."""
 
 def showhelp():
-    sys.stdout.write(usage)
-    sys.stdout.write(b'\noptions:\n')
+    pycompat.stdout.write(usage.encode('utf8'))
+    pycompat.stdout.write(b'\noptions:\n')
 
     out_opts = []
     for shortopt, longopt, default, desc in options:
@@ -51,6 +51,6 @@
                          b'%s' % desc))
     opts_len = max([len(opt[0]) for opt in out_opts])
     for first, second in out_opts:
-        sys.stdout.write(b' %-*s  %s\n' % (opts_len, first, second))
+        pycompat.stdout.write(b' %-*s  %s\n' % (opts_len, first, second))
 
 try:
@@ -55,7 +55,7 @@
 
 try:
-    for fp in (sys.stdin, sys.stdout, sys.stderr):
+    for fp in (sys.stdin, pycompat.stdout, sys.stderr):
         procutil.setbinary(fp)
 
     opts = {}
     try:
@@ -58,11 +58,12 @@
         procutil.setbinary(fp)
 
     opts = {}
     try:
-        args = fancyopts.fancyopts(sys.argv[1:], options, opts)
+        bargv = [a.encode('utf8') for a in sys.argv[1:]]
+        args = fancyopts.fancyopts(bargv, options, opts)
     except getopt.GetoptError as e:
         raise ParseError(e)
     if opts[b'help']:
         showhelp()
         sys.exit(0)
     if len(args) != 3:
@@ -63,10 +64,10 @@
     except getopt.GetoptError as e:
         raise ParseError(e)
     if opts[b'help']:
         showhelp()
         sys.exit(0)
     if len(args) != 3:
-            raise ParseError(_(b'wrong number of arguments'))
+            raise ParseError(_(b'wrong number of arguments').decode('utf8'))
     local, base, other = args
     sys.exit(simplemerge.simplemerge(uimod.ui.load(),
                                      context.arbitraryfilectx(local),
@@ -74,7 +75,9 @@
                                      context.arbitraryfilectx(other),
                                      **pycompat.strkwargs(opts)))
 except ParseError as e:
-    sys.stdout.write(b"%s: %s\n" % (sys.argv[0], e))
+    if pycompat.ispy3:
+        e = str(e).encode('utf8')
+    pycompat.stdout.write(b"%s: %s\n" % (sys.argv[0].encode('utf8'), e))
     showhelp()
     sys.exit(1)
 except error.Abort as e:
@@ -78,7 +81,7 @@
     showhelp()
     sys.exit(1)
 except error.Abort as e:
-    sys.stderr.write(b"abort: %s\n" % e)
+    pycompat.stderr.write(b"abort: %s\n" % e)
     sys.exit(255)
 except KeyboardInterrupt:
     sys.exit(255)