Avoid PyUnicode_AS_UNICODE in the UTF-8 encoder
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 4c509b4..cf1f2ea 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -4820,11 +4820,18 @@
                 for(k = repsize; k > 0; k--)
                     *p++ = *prep++;
             } else /* rep is unicode */ {
-                const Py_UNICODE *prep = PyUnicode_AS_UNICODE(rep);
-                Py_UNICODE c;
+                enum PyUnicode_Kind repkind;
+                void *repdata;
+
+                if (PyUnicode_READY(rep) < 0) {
+                    Py_DECREF(rep);
+                    goto error;
+                }
+                repkind = PyUnicode_KIND(rep);
+                repdata = PyUnicode_DATA(rep);
 
                 for(k=0; k<repsize; k++) {
-                    c = prep[k];
+                    Py_UCS4 c = PyUnicode_READ(repkind, repdata, k);
                     if (0x80 <= c) {
                         raise_encode_exception(&exc, "utf-8",
                                                unicode,
@@ -4832,7 +4839,7 @@
                                                "surrogates not allowed");
                         goto error;
                     }
-                    *p++ = (char)prep[k];
+                    *p++ = (char)c;
                 }
             }
             Py_DECREF(rep);