Issue #16903: Popen.communicate() on Unix now accepts strings when
universal_newlines is true as on Windows.
diff --git a/Lib/subprocess.py b/Lib/subprocess.py
index f32f081..1a21455 100644
--- a/Lib/subprocess.py
+++ b/Lib/subprocess.py
@@ -1519,6 +1519,8 @@
                 fd2output[self.stderr.fileno()] = stderr = []
 
             input_offset = 0
+            if self.universal_newlines and isinstance(input, str):
+                input = input.encode(self.stdin.encoding)
             while fd2file:
                 try:
                     ready = poller.poll()
@@ -1571,6 +1573,8 @@
                 stderr = []
 
             input_offset = 0
+            if self.universal_newlines and isinstance(input, str):
+                input = input.encode(self.stdin.encoding)
             while read_set or write_set:
                 try:
                     rlist, wlist, xlist = select.select(read_set, write_set, [])