diff --git a/Doc/library/sys.rst b/Doc/library/sys.rst
index 79652ea..09dd844 100644
--- a/Doc/library/sys.rst
+++ b/Doc/library/sys.rst
@@ -712,18 +712,6 @@
       :func:`setswitchinterval` instead.
 
 
-.. function:: setdefaultencoding(name)
-
-   Set the current default string encoding used by the Unicode implementation.  If
-   *name* does not match any available encoding, :exc:`LookupError` is raised.
-   This function is only intended to be used by the :mod:`site` module
-   implementation and, where needed, by :mod:`sitecustomize`.  Once used by the
-   :mod:`site` module, it is removed from the :mod:`sys` module's namespace.
-
-   .. Note that :mod:`site` is not imported if the :option:`-S` option is passed
-      to the interpreter, in which case this function will remain available.
-
-
 .. function:: setdlopenflags(n)
 
    Set the flags used by the interpreter for :cfunc:`dlopen` calls, such as when
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index cd2f165..5fadb99 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -212,7 +212,6 @@
 # define PyUnicode_Replace PyUnicodeUCS2_Replace
 # define PyUnicode_Resize PyUnicodeUCS2_Resize
 # define PyUnicode_RichCompare PyUnicodeUCS2_RichCompare
-# define PyUnicode_SetDefaultEncoding PyUnicodeUCS2_SetDefaultEncoding
 # define PyUnicode_Split PyUnicodeUCS2_Split
 # define PyUnicode_Splitlines PyUnicodeUCS2_Splitlines
 # define PyUnicode_Tailmatch PyUnicodeUCS2_Tailmatch
@@ -295,7 +294,6 @@
 # define PyUnicode_Replace PyUnicodeUCS4_Replace
 # define PyUnicode_Resize PyUnicodeUCS4_Resize
 # define PyUnicode_RichCompare PyUnicodeUCS4_RichCompare
-# define PyUnicode_SetDefaultEncoding PyUnicodeUCS4_SetDefaultEncoding
 # define PyUnicode_Split PyUnicodeUCS4_Split
 # define PyUnicode_Splitlines PyUnicodeUCS4_Splitlines
 # define PyUnicode_Tailmatch PyUnicodeUCS4_Tailmatch
@@ -708,16 +706,6 @@
 
 PyAPI_FUNC(const char*) PyUnicode_GetDefaultEncoding(void);
 
-/* Sets the currently active default encoding.
-
-   Returns 0 on success, -1 in case of an error.
-
- */
-
-PyAPI_FUNC(int) PyUnicode_SetDefaultEncoding(
-    const char *encoding        /* Encoding name in standard form */
-    );
-
 /* --- Generic Codecs ----------------------------------------------------- */
 
 /* Create a Unicode object by decoding the encoded string s of the
diff --git a/Lib/site.py b/Lib/site.py
index f108432..51516aa 100644
--- a/Lib/site.py
+++ b/Lib/site.py
@@ -460,25 +460,6 @@
                 encodings._cache[enc] = encodings._unknown
                 encodings.aliases.aliases[enc] = 'mbcs'
 
-def setencoding():
-    """Set the string encoding used by the Unicode implementation.  The
-    default is 'ascii', but if you're willing to experiment, you can
-    change this."""
-    encoding = "ascii" # Default value set by _PyUnicode_Init()
-    if 0:
-        # Enable to support locale aware default string encodings.
-        import locale
-        loc = locale.getdefaultlocale()
-        if loc[1]:
-            encoding = loc[1]
-    if 0:
-        # Enable to switch off string to Unicode coercion and implicit
-        # Unicode to string conversion.
-        encoding = "undefined"
-    if encoding != "ascii":
-        # On Non-Unicode builds this will raise an AttributeError...
-        sys.setdefaultencoding(encoding) # Needs Python Unicode build !
-
 
 def execsitecustomize():
     """Run custom site specific code, if available."""
@@ -527,15 +508,9 @@
     setcopyright()
     sethelper()
     aliasmbcs()
-    setencoding()
     execsitecustomize()
     if ENABLE_USER_SITE:
         execusercustomize()
-    # Remove sys.setdefaultencoding() so that users cannot change the
-    # encoding after initialization.  The test for presence is needed when
-    # this module is run as a script, because this code is executed twice.
-    if hasattr(sys, "setdefaultencoding"):
-        del sys.setdefaultencoding
 
 main()
 
diff --git a/Lib/test/test_site.py b/Lib/test/test_site.py
index 013bfe1..8d03224 100644
--- a/Lib/test/test_site.py
+++ b/Lib/test/test_site.py
@@ -29,10 +29,6 @@
 
 class HelperFunctionsTests(unittest.TestCase):
     """Tests for helper functions.
-
-    The setting of the encoding (set using sys.setdefaultencoding) used by
-    the Unicode implementation is not tested.
-
     """
 
     def setUp(self):
@@ -333,10 +329,6 @@
                 else:
                     self.fail("did not alias mbcs")
 
-    def test_setdefaultencoding_removed(self):
-        # Make sure sys.setdefaultencoding is gone
-        self.assertTrue(not hasattr(sys, "setdefaultencoding"))
-
     def test_sitecustomize_executed(self):
         # If sitecustomize is available, it should have been imported.
         if "sitecustomize" not in sys.modules:
diff --git a/Misc/NEWS b/Misc/NEWS
index ceac14e..11b5913 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,10 @@
 Core and Builtins
 -----------------
 
+- Issue #9549: sys.setdefaultencoding() and PyUnicode_SetDefaultEncoding()
+  are now removed, since their effect was inexistent in 3.x (the default
+  encoding is hardcoded to utf-8 and cannot be changed).
+
 - Issue #7415: PyUnicode_FromEncodedObject() now uses the new buffer API
   properly.  Patch by Stefan Behnel.
 
diff --git a/Misc/cheatsheet b/Misc/cheatsheet
index 8c5ddcb..ebbf1d4 100644
--- a/Misc/cheatsheet
+++ b/Misc/cheatsheet
@@ -1326,8 +1326,6 @@
 exc_info()         traceback return value to a local variable in a
                    function handling an exception will cause a circular
                    reference.
-setdefaultencoding Change default Unicode encoding - defaults to 7-bit ASCII.
-(encoding)
 getrecursionlimit  Retrieve maximum recursion depth.
 ()
 setrecursionlimit  Set maximum recursion depth. (Defaults to 1000.)
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 753b465..6012492 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -1784,17 +1784,6 @@
     return unicode_default_encoding;
 }
 
-int PyUnicode_SetDefaultEncoding(const char *encoding)
-{
-    if (strcmp(encoding, unicode_default_encoding) != 0) {
-        PyErr_Format(PyExc_ValueError,
-                     "Can only set default encoding to %s",
-                     unicode_default_encoding);
-        return -1;
-    }
-    return 0;
-}
-
 /* create or adjust a UnicodeDecodeError */
 static void
 make_decode_exception(PyObject **exceptionObject,
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 013f5f1..90c165a 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -183,24 +183,6 @@
 );
 
 static PyObject *
-sys_setdefaultencoding(PyObject *self, PyObject *args)
-{
-    char *encoding;
-    if (!PyArg_ParseTuple(args, "s:setdefaultencoding", &encoding))
-        return NULL;
-    if (PyUnicode_SetDefaultEncoding(encoding))
-        return NULL;
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-PyDoc_STRVAR(setdefaultencoding_doc,
-"setdefaultencoding(encoding)\n\
-\n\
-Set the current default string encoding used by the Unicode implementation."
-);
-
-static PyObject *
 sys_getfilesystemencoding(PyObject *self)
 {
     if (Py_FileSystemDefaultEncoding)
@@ -1030,8 +1012,6 @@
 #ifdef USE_MALLOPT
     {"mdebug",          sys_mdebug, METH_VARARGS},
 #endif
-    {"setdefaultencoding", sys_setdefaultencoding, METH_VARARGS,
-     setdefaultencoding_doc},
     {"setfilesystemencoding", sys_setfilesystemencoding, METH_VARARGS,
      setfilesystemencoding_doc},
     {"setcheckinterval",        sys_setcheckinterval, METH_VARARGS,
