Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem
encoding instead of UTF-8.
diff --git a/Doc/c-api/exceptions.rst b/Doc/c-api/exceptions.rst
index 9fec46f..24ca264 100644
--- a/Doc/c-api/exceptions.rst
+++ b/Doc/c-api/exceptions.rst
@@ -297,8 +297,9 @@
    is a straightforward wrapper around the Python function
    :func:`warnings.warn_explicit`, see there for more information.  The *module*
    and *registry* arguments may be set to *NULL* to get the default effect
-   described there. *message*, *filename* and *module* are UTF-8 encoded
-   strings.
+   described there. *message* and *module* are UTF-8 encoded strings,
+   *filename* is decoded from the filesystem encoding
+   (:func:`sys.getfilesystemencoding`).
 
 
 .. c:function:: int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...)
diff --git a/Include/warnings.h b/Include/warnings.h
index 7553a25..b7db681 100644
--- a/Include/warnings.h
+++ b/Include/warnings.h
@@ -20,7 +20,7 @@
 PyAPI_FUNC(int) PyErr_WarnExplicit(
     PyObject *category,
     const char *message,        /* UTF-8 encoded string */
-    const char *filename,       /* UTF-8 encoded string */
+    const char *filename,       /* decoded from the filesystem encoding */
     int lineno,
     const char *module,         /* UTF-8 encoded string */
     PyObject *registry);
diff --git a/Misc/NEWS b/Misc/NEWS
index 6c7cb46..4fb23c3 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -8,6 +8,9 @@
 Core and Builtins
 -----------------
 
+- Issue #10779: PyErr_WarnExplicit() decodes the filename from the filesystem
+  encoding instead of UTF-8.
+
 Library
 -------
 
diff --git a/Python/_warnings.c b/Python/_warnings.c
index 87755e1..51c39e4 100644
--- a/Python/_warnings.c
+++ b/Python/_warnings.c
@@ -783,7 +783,7 @@
 {
     PyObject *res;
     PyObject *message = PyUnicode_FromString(text);
-    PyObject *filename = PyUnicode_FromString(filename_str);
+    PyObject *filename = PyUnicode_DecodeFSDefault(filename_str);
     PyObject *module = NULL;
     int ret = -1;