bpo-42208: Add _locale._get_locale_encoding() (GH-23052) · python/cpython@b62bdf7 (original) (raw)

`@@ -619,53 +619,49 @@ def resetlocale(category=LC_ALL):

`

619

619

` """

`

620

620

`_setlocale(category, _build_localename(getdefaultlocale()))

`

621

621

``

622

``

`-

if sys.platform.startswith("win"):

`

623

``

`-

On Win32, this will return the ANSI code page

`

624

``

`-

def getpreferredencoding(do_setlocale = True):

`

625

``

`-

"""Return the charset that the user is likely using."""

`

``

622

+

``

623

`+

try:

`

``

624

`+

from _locale import _get_locale_encoding

`

``

625

`+

except ImportError:

`

``

626

`+

def _get_locale_encoding():

`

``

627

`+

if hasattr(sys, 'getandroidapilevel'):

`

``

628

`+

On Android langinfo.h and CODESET are missing, and UTF-8 is

`

``

629

`+

always used in mbstowcs() and wcstombs().

`

``

630

`+

return 'UTF-8'

`

626

631

`if sys.flags.utf8_mode:

`

627

632

`return 'UTF-8'

`

628

``

`-

import _bootlocale

`

629

``

`-

return _bootlocale.getpreferredencoding(False)

`

``

633

`+

encoding = getdefaultlocale()[1]

`

``

634

`+

if encoding is None:

`

``

635

`+

LANG not set, default conservatively to ASCII

`

``

636

`+

encoding = 'ascii'

`

``

637

`+

return encoding

`

``

638

+

``

639

`+

try:

`

``

640

`+

CODESET

`

``

641

`+

except NameError:

`

``

642

`+

def getpreferredencoding(do_setlocale=True):

`

``

643

`+

"""Return the charset that the user is likely using."""

`

``

644

`+

return _get_locale_encoding()

`

630

645

`else:

`

631

646

`# On Unix, if CODESET is available, use that.

`

632

``

`-

try:

`

633

``

`-

CODESET

`

634

``

`-

except NameError:

`

635

``

`-

if hasattr(sys, 'getandroidapilevel'):

`

636

``

`-

On Android langinfo.h and CODESET are missing, and UTF-8 is

`

637

``

`-

always used in mbstowcs() and wcstombs().

`

638

``

`-

def getpreferredencoding(do_setlocale = True):

`

639

``

`-

return 'UTF-8'

`

640

``

`-

else:

`

641

``

`-

Fall back to parsing environment variables :-(

`

642

``

`-

def getpreferredencoding(do_setlocale = True):

`

643

``

`-

"""Return the charset that the user is likely using,

`

644

``

`-

by looking at environment variables."""

`

645

``

`-

if sys.flags.utf8_mode:

`

646

``

`-

return 'UTF-8'

`

647

``

`-

res = getdefaultlocale()[1]

`

648

``

`-

if res is None:

`

649

``

`-

LANG not set, default conservatively to ASCII

`

650

``

`-

res = 'ascii'

`

651

``

`-

return res

`

652

``

`-

else:

`

653

``

`-

def getpreferredencoding(do_setlocale = True):

`

654

``

`-

"""Return the charset that the user is likely using,

`

655

``

`-

according to the system configuration."""

`

656

``

`-

if sys.flags.utf8_mode:

`

657

``

`-

return 'UTF-8'

`

658

``

`-

import _bootlocale

`

659

``

`-

if do_setlocale:

`

660

``

`-

oldloc = setlocale(LC_CTYPE)

`

661

``

`-

try:

`

662

``

`-

setlocale(LC_CTYPE, "")

`

663

``

`-

except Error:

`

664

``

`-

pass

`

665

``

`-

result = _bootlocale.getpreferredencoding(False)

`

666

``

`-

if do_setlocale:

`

667

``

`-

setlocale(LC_CTYPE, oldloc)

`

668

``

`-

return result

`

``

647

`+

def getpreferredencoding(do_setlocale=True):

`

``

648

`+

"""Return the charset that the user is likely using,

`

``

649

`+

according to the system configuration."""

`

``

650

`+

if sys.flags.utf8_mode:

`

``

651

`+

return 'UTF-8'

`

``

652

+

``

653

`+

if not do_setlocale:

`

``

654

`+

return _get_locale_encoding()

`

``

655

+

``

656

`+

old_loc = setlocale(LC_CTYPE)

`

``

657

`+

try:

`

``

658

`+

try:

`

``

659

`+

setlocale(LC_CTYPE, "")

`

``

660

`+

except Error:

`

``

661

`+

pass

`

``

662

`+

return _get_locale_encoding()

`

``

663

`+

finally:

`

``

664

`+

setlocale(LC_CTYPE, old_loc)

`

669

665

``

670

666

``

671

667

`### Database

`