bpo-34485: Fix _Py_InitializeCore() for C locale coercion (GH-8979) (GH-8981)

* _Py_InitializeCore() now sets the LC_CTYPE locale to the user
  preferred locale before checking if the C locale should be coerced
  or not in _PyCoreConfig_Read().
* Fix pymain_read_conf(): remember if the C locale has been coerced
  when the configuration should be read again if the encoding has
  changed.

(cherry picked from commit 2c8ddcf4f14f3e4c87a6fe6678ab5ad09130c6ab)
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index f75b860..fc4ee06 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -672,10 +672,6 @@
     _PyRuntime.finalizing = NULL;
 
 #ifndef MS_WINDOWS
-    /* Set up the LC_CTYPE locale, so we can obtain
-       the locale's charset without having to switch
-       locales. */
-    _Py_SetLocaleFromEnv(LC_CTYPE);
     _emit_stderr_warning_for_legacy_locale(core_config);
 #endif
 
@@ -829,6 +825,12 @@
        (and the input configuration is read only). */
     _PyCoreConfig config = _PyCoreConfig_INIT;
 
+#ifndef MS_WINDOWS
+    /* Set up the LC_CTYPE locale, so we can obtain the locale's charset
+       without having to switch locales. */
+    _Py_SetLocaleFromEnv(LC_CTYPE);
+#endif
+
     _PyMem_SetDefaultAllocator(PYMEM_DOMAIN_RAW, &old_alloc);
     if (_PyCoreConfig_Copy(&config, src_config) >= 0) {
         err = _PyCoreConfig_Read(&config);