mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Make the code that ensures that python internal encodings are not ASCII more robust
This commit is contained in:
parent
0c82e9c0d2
commit
7f9a2eb60f
@ -12,7 +12,7 @@ import sys
|
|||||||
is_narrow_build = sys.maxunicode < 0x10ffff
|
is_narrow_build = sys.maxunicode < 0x10ffff
|
||||||
|
|
||||||
# Setup code {{{
|
# Setup code {{{
|
||||||
import sys
|
import codecs
|
||||||
|
|
||||||
from calibre.constants import plugins
|
from calibre.constants import plugins
|
||||||
from calibre.utils.config_base import tweaks
|
from calibre.utils.config_base import tweaks
|
||||||
@ -30,25 +30,26 @@ del err
|
|||||||
icu_unicode_version = getattr(_icu, 'unicode_version', None)
|
icu_unicode_version = getattr(_icu, 'unicode_version', None)
|
||||||
_nmodes = {m:getattr(_icu, 'UNORM_'+m, None) for m in ('NFC', 'NFD', 'NFKC', 'NFKD', 'NONE', 'DEFAULT', 'FCD')}
|
_nmodes = {m:getattr(_icu, 'UNORM_'+m, None) for m in ('NFC', 'NFD', 'NFKC', 'NFKD', 'NONE', 'DEFAULT', 'FCD')}
|
||||||
|
|
||||||
ascii_encodings = {b'ansi_x3.4-1968', b'ascii'}
|
# Ensure that the python internal filesystem and default encodings are not ASCII
|
||||||
|
def is_ascii(name):
|
||||||
|
try:
|
||||||
|
return codecs.lookup(name).name == b'ascii'
|
||||||
|
except (TypeError, LookupError):
|
||||||
|
return True
|
||||||
try:
|
try:
|
||||||
senc = sys.getdefaultencoding()
|
if is_ascii(sys.getdefaultencoding()):
|
||||||
if not senc or senc.lower() in ascii_encodings:
|
|
||||||
_icu.set_default_encoding(b'utf-8')
|
_icu.set_default_encoding(b'utf-8')
|
||||||
del senc
|
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
fenc = sys.getfilesystemencoding()
|
if is_ascii(sys.getfilesystemencoding()):
|
||||||
if not fenc or fenc.lower() in ascii_encodings:
|
|
||||||
_icu.set_filesystem_encoding(b'utf-8')
|
_icu.set_filesystem_encoding(b'utf-8')
|
||||||
del fenc
|
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
del ascii_encodings
|
del is_ascii
|
||||||
|
|
||||||
def collator():
|
def collator():
|
||||||
global _collator, _locale
|
global _collator, _locale
|
||||||
|
Loading…
x
Reference in New Issue
Block a user