2
0
Эх сурвалжийг харах

UPD: More universal way to find ANSI and OEM encoding

Alexander Koblov 9 жил өмнө
parent
commit
87e9277888

+ 260 - 0
components/doublecmd/dcconvertencoding.inc

@@ -0,0 +1,260 @@
+{ Do not edit this file! It is autogenerated from C program natspec.c }
+
+const
+  charset_relation: array[0..253, 0..3] of String =
+  (
+    ('C'     , 'C'                 , 'CP1252'    , 'IBM437'    ),
+    ('POSIX' , 'POSIX'             , 'CP1252'    , 'IBM437'    ),
+    ('aa'    , 'aa_DJ'             , 'CP1252'    , 'IBM437'    ),
+    ('aa'    , 'aa_ER'             , 'CP1252'    , 'IBM437'    ),
+    ('aa'    , 'aa_ER@saaho'       , 'CP1252'    , 'IBM437'    ),
+    ('aa'    , 'aa_ET'             , 'CP1252'    , 'IBM437'    ),
+    ('af'    , 'af_ZA'             , 'CP1252'    , 'IBM850'    ),
+    ('am'    , 'am_ET'             , 'CP1252'    , 'IBM437'    ),
+    ('an'    , 'an_ES'             , 'CP1252'    , 'IBM437'    ),
+    ('ar'    , 'ar_AE'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_BH'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_DZ'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_EG'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_IN'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_IQ'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_JO'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_KW'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_LB'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_LY'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_MA'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_OM'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_QA'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_SA'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_SD'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_SY'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_TN'             , 'CP1256'    , ''          ),
+    ('ar'    , 'ar_YE'             , 'CP1256'    , ''          ),
+    ('as'    , 'as_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('ast'   , 'ast_ES'            , 'CP1252'    , 'IBM437'    ),
+    ('az'    , 'az_AZ'             , 'CP1254'    , 'IBM857'    ),
+    ('be'    , 'be_BY'             , 'CP1251'    , 'IBM849'    ),
+    ('be'    , 'be_BY@latin'       , 'CP1251'    , 'IBM849'    ),
+    ('ber'   , 'ber_DZ'            , 'CP1252'    , 'IBM437'    ),
+    ('ber'   , 'ber_MA'            , 'CP1252'    , 'IBM437'    ),
+    ('bg'    , 'bg_BG'             , 'CP1251'    , 'IBM866'    ),
+    ('bn'    , 'bn_BD'             , 'CP1252'    , 'IBM437'    ),
+    ('bn'    , 'bn_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('bo'    , 'bo_CN'             , 'CP1252'    , 'IBM437'    ),
+    ('bo'    , 'bo_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('br'    , 'br_FR'             , 'CP1252'    , 'IBM850'    ),
+    ('br'    , 'br_FR@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('bs'    , 'bs_BA'             , 'CP1252'    , 'IBM437'    ),
+    ('byn'   , 'byn_ER'            , 'CP1252'    , 'IBM437'    ),
+    ('ca'    , 'ca_AD'             , 'CP1252'    , 'IBM850'    ),
+    ('ca'    , 'ca_ES'             , 'CP1252'    , 'IBM850'    ),
+    ('ca'    , 'ca_ES@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('ca'    , 'ca_FR'             , 'CP1252'    , 'IBM850'    ),
+    ('ca'    , 'ca_IT'             , 'CP1252'    , 'IBM850'    ),
+    ('crh'   , 'crh_UA'            , 'CP1252'    , 'IBM437'    ),
+    ('cs'    , 'cs_CZ'             , 'CP1250'    , 'IBM852'    ),
+    ('csb'   , 'csb_PL'            , 'CP1252'    , 'IBM437'    ),
+    ('cy'    , 'cy_GB'             , 'ISO885914' , 'IBM850'    ),
+    ('da'    , 'da_DK'             , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_AT'             , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_AT@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_BE'             , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_BE@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_CH'             , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_DE'             , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_DE@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_LU'             , 'CP1252'    , 'IBM850'    ),
+    ('de'    , 'de_LU@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('dz'    , 'dz_BT'             , 'CP1252'    , 'IBM437'    ),
+    ('el'    , 'el_CY'             , 'CP1253'    , ''          ),
+    ('el'    , 'el_GR'             , 'CP1253'    , ''          ),
+    ('en'    , 'en_AG'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_AU'             , 'CP1252'    , 'IBM850'    ),
+    ('en'    , 'en_BW'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_CA'             , 'CP1252'    , 'IBM850'    ),
+    ('en'    , 'en_DK'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_GB'             , 'CP1252'    , 'IBM850'    ),
+    ('en'    , 'en_HK'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_IE'             , 'CP1252'    , 'IBM850'    ),
+    ('en'    , 'en_IE@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('en'    , 'en_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_NG'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_NZ'             , 'CP1252'    , 'IBM850'    ),
+    ('en'    , 'en_PH'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_SG'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_US'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('en'    , 'en_ZW'             , 'CP1252'    , 'IBM437'    ),
+    ('es'    , 'es_AR'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_BO'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_CL'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_CO'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_CR'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_DO'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_EC'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_ES'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_ES@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_GT'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_HN'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_MX'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_NI'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_PA'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_PE'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_PR'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_PY'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_SV'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_US'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_UY'             , 'CP1252'    , 'IBM850'    ),
+    ('es'    , 'es_VE'             , 'CP1252'    , 'IBM850'    ),
+    ('et'    , 'et_EE'             , 'CP1257'    , ''          ),
+    ('eu'    , 'eu_ES'             , 'CP1252'    , 'IBM850'    ),
+    ('eu'    , 'eu_ES@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('fa'    , 'fa_IR'             , 'CP1256'    , ''          ),
+    ('fi'    , 'fi_FI'             , 'CP1252'    , 'IBM850'    ),
+    ('fi'    , 'fi_FI@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('fil'   , 'fil_PH'            , 'CP1252'    , 'IBM437'    ),
+    ('fo'    , 'fo_FO'             , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_BE'             , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_BE@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_CA'             , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_CH'             , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_FR'             , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_FR@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_LU'             , 'CP1252'    , 'IBM850'    ),
+    ('fr'    , 'fr_LU@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('fur'   , 'fur_IT'            , 'CP1252'    , 'IBM437'    ),
+    ('fy'    , 'fy_DE'             , 'CP1252'    , 'IBM437'    ),
+    ('fy'    , 'fy_NL'             , 'CP1252'    , 'IBM437'    ),
+    ('ga'    , 'ga_IE'             , 'CP1252'    , 'IBM437'    ),
+    ('ga'    , 'ga_IE@euro'        , 'CP1252'    , 'IBM437'    ),
+    ('gd'    , 'gd_GB'             , 'CP1252'    , 'IBM850'    ),
+    ('gez'   , 'gez_ER'            , 'CP1252'    , 'IBM437'    ),
+    ('gez'   , 'gez_ER@abegede'    , 'CP1252'    , 'IBM437'    ),
+    ('gez'   , 'gez_ET'            , 'CP1252'    , 'IBM437'    ),
+    ('gez'   , 'gez_ET@abegede'    , 'CP1252'    , 'IBM437'    ),
+    ('gl'    , 'gl_ES'             , 'CP1252'    , 'IBM850'    ),
+    ('gl'    , 'gl_ES@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('gv'    , 'gv_GB'             , 'CP1252'    , 'IBM850'    ),
+    ('ha'    , 'ha_NG'             , 'CP1252'    , 'IBM437'    ),
+    ('he'    , 'he_IL'             , 'CP1255'    , 'IBM862'    ),
+    ('hne'   , 'hne_IN'            , 'CP1252'    , 'IBM437'    ),
+    ('hr'    , 'hr_HR'             , 'CP1250'    , 'IBM852'    ),
+    ('hsb'   , 'hsb_DE'            , 'CP1252'    , 'IBM437'    ),
+    ('ht'    , 'ht_HT'             , 'CP1252'    , 'IBM437'    ),
+    ('hu'    , 'hu_HU'             , 'CP1250'    , 'IBM852'    ),
+    ('hy'    , 'hy_AM'             , 'CP1252'    , 'IBM437'    ),
+    ('id'    , 'id_ID'             , 'CP1252'    , 'IBM850'    ),
+    ('ig'    , 'ig_NG'             , 'CP1252'    , 'IBM437'    ),
+    ('ik'    , 'ik_CA'             , 'CP1252'    , 'IBM437'    ),
+    ('is'    , 'is_IS'             , 'CP1252'    , 'IBM850'    ),
+    ('it'    , 'it_CH'             , 'CP1252'    , 'IBM850'    ),
+    ('it'    , 'it_IT'             , 'CP1252'    , 'IBM850'    ),
+    ('it'    , 'it_IT@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('iu'    , 'iu_CA'             , 'CP1252'    , 'IBM437'    ),
+    ('iw'    , 'iw_IL'             , 'CP1252'    , 'IBM437'    ),
+    ('ja'    , 'ja_JP'             , 'CP932'     , 'CP932'     ),
+    ('kk'    , 'kk_KZ'             , 'CP1251'    , 'IBM866'    ),
+    ('kl'    , 'kl_GL'             , 'CP1252'    , 'IBM437'    ),
+    ('km'    , 'km_KH'             , 'CP1252'    , 'IBM437'    ),
+    ('ko'    , 'ko_KR'             , 'CP949'     , 'CP949'     ),
+    ('ks'    , 'ks_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('ks'    , 'ks_IN@devanagari'  , 'CP1252'    , 'IBM437'    ),
+    ('ku'    , 'ku_TR'             , 'CP1252'    , 'IBM437'    ),
+    ('kw'    , 'kw_GB'             , 'CP1252'    , 'IBM850'    ),
+    ('ky'    , 'ky_KG'             , 'CP1251'    , 'IBM866'    ),
+    ('lg'    , 'lg_UG'             , 'CP1252'    , 'IBM437'    ),
+    ('li'    , 'li_BE'             , 'CP1252'    , 'IBM437'    ),
+    ('li'    , 'li_NL'             , 'CP1252'    , 'IBM437'    ),
+    ('lo'    , 'lo_LA'             , 'CP1252'    , 'IBM437'    ),
+    ('lt'    , 'lt_LT'             , 'CP1257'    , ''          ),
+    ('lv'    , 'lv_LV'             , 'CP1257'    , ''          ),
+    ('mai'   , 'mai_IN'            , 'CP1252'    , 'IBM437'    ),
+    ('mg'    , 'mg_MG'             , 'CP1252'    , 'IBM437'    ),
+    ('mi'    , 'mi_NZ'             , 'CP1252'    , 'IBM437'    ),
+    ('mk'    , 'mk_MK'             , 'CP1251'    , 'IBM866'    ),
+    ('ml'    , 'ml_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('mn'    , 'mn_MN'             , 'CP1251'    , 'IBM866'    ),
+    ('ms'    , 'ms_MY'             , 'CP1252'    , 'IBM850'    ),
+    ('mt'    , 'mt_MT'             , 'CP1252'    , 'IBM437'    ),
+    ('nan'   , 'nan_TW@latin'      , 'CP1252'    , 'IBM437'    ),
+    ('nb'    , 'nb_NO'             , 'CP1252'    , 'IBM850'    ),
+    ('nds'   , 'nds_DE'            , 'CP1252'    , 'IBM437'    ),
+    ('nds'   , 'nds_NL'            , 'CP1252'    , 'IBM437'    ),
+    ('ne'    , 'ne_NP'             , 'CP1252'    , 'IBM437'    ),
+    ('nl'    , 'nl_AW'             , 'CP1252'    , 'IBM850'    ),
+    ('nl'    , 'nl_BE'             , 'CP1252'    , 'IBM850'    ),
+    ('nl'    , 'nl_BE@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('nl'    , 'nl_NL'             , 'CP1252'    , 'IBM850'    ),
+    ('nl'    , 'nl_NL@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('nn'    , 'nn_NO'             , 'CP1252'    , 'IBM850'    ),
+    ('no'    , 'no_NO'             , 'CP1252'    , 'IBM437'    ),
+    ('nr'    , 'nr_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('nso'   , 'nso_ZA'            , 'CP1252'    , 'IBM437'    ),
+    ('oc'    , 'oc_FR'             , 'CP1252'    , 'IBM437'    ),
+    ('om'    , 'om_ET'             , 'CP1252'    , 'IBM437'    ),
+    ('om'    , 'om_KE'             , 'CP1252'    , 'IBM437'    ),
+    ('or'    , 'or_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('pap'   , 'pap_AN'            , 'CP1252'    , 'IBM437'    ),
+    ('pl'    , 'pl_PL'             , 'CP1250'    , 'IBM852'    ),
+    ('pt'    , 'pt_BR'             , 'CP1252'    , 'IBM850'    ),
+    ('pt'    , 'pt_PT'             , 'CP1252'    , 'IBM850'    ),
+    ('pt'    , 'pt_PT@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('ro'    , 'ro_RO'             , 'CP1250'    , 'IBM852'    ),
+    ('ru'    , 'ru_RU'             , 'CP1251'    , 'IBM866'    ),
+    ('ru'    , 'ru_UA'             , 'CP1251'    , 'IBM866'    ),
+    ('rw'    , 'rw_RW'             , 'CP1252'    , 'IBM437'    ),
+    ('sc'    , 'sc_IT'             , 'CP1252'    , 'IBM437'    ),
+    ('sd'    , 'sd_IN'             , 'CP1252'    , 'IBM437'    ),
+    ('sd'    , 'sd_IN@devanagari'  , 'CP1252'    , 'IBM437'    ),
+    ('se'    , 'se_NO'             , 'CP1252'    , 'IBM437'    ),
+    ('shs'   , 'shs_CA'            , 'CP1252'    , 'IBM437'    ),
+    ('si'    , 'si_LK'             , 'CP1252'    , 'IBM437'    ),
+    ('sid'   , 'sid_ET'            , 'CP1252'    , 'IBM437'    ),
+    ('sk'    , 'sk_SK'             , 'CP1250'    , 'IBM852'    ),
+    ('sl'    , 'sl_SI'             , 'CP1250'    , 'IBM852'    ),
+    ('so'    , 'so_DJ'             , 'CP1252'    , 'IBM437'    ),
+    ('so'    , 'so_ET'             , 'CP1252'    , 'IBM437'    ),
+    ('so'    , 'so_KE'             , 'CP1252'    , 'IBM437'    ),
+    ('so'    , 'so_SO'             , 'CP1252'    , 'IBM437'    ),
+    ('sq'    , 'sq_AL'             , 'CP1250'    , 'IBM852'    ),
+    ('sr'    , 'sr_ME'             , 'CP1250'    , 'IBM852'    ),
+    ('sr'    , 'sr_RS'             , 'CP1250'    , 'IBM852'    ),
+    ('sr'    , 'sr_RS@latin'       , 'CP1250'    , 'IBM852'    ),
+    ('ss'    , 'ss_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('st'    , 'st_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('sv'    , 'sv_FI'             , 'CP1252'    , 'IBM850'    ),
+    ('sv'    , 'sv_FI@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('sv'    , 'sv_SE'             , 'CP1252'    , 'IBM850'    ),
+    ('tg'    , 'tg_TJ'             , 'CP1252'    , 'IBM437'    ),
+    ('th'    , 'th_TH'             , 'IBM874'    , 'IBM874'    ),
+    ('ti'    , 'ti_ER'             , 'CP1252'    , 'IBM437'    ),
+    ('ti'    , 'ti_ET'             , 'CP1252'    , 'IBM437'    ),
+    ('tig'   , 'tig_ER'            , 'CP1252'    , 'IBM437'    ),
+    ('tk'    , 'tk_TM'             , 'CP1252'    , 'IBM437'    ),
+    ('tl'    , 'tl_PH'             , 'CP1252'    , 'IBM437'    ),
+    ('tn'    , 'tn_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('tr'    , 'tr_CY'             , 'CP1254'    , 'IBM857'    ),
+    ('tr'    , 'tr_TR'             , 'CP1254'    , 'IBM857'    ),
+    ('ts'    , 'ts_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('tt'    , 'tt_RU'             , 'CP1251'    , 'IBM866'    ),
+    ('tt'    , 'tt_RU@iqtelif'     , 'CP1251'    , 'IBM866'    ),
+    ('ug'    , 'ug_CN'             , 'CP1252'    , 'IBM437'    ),
+    ('uk'    , 'uk_UA'             , 'CP1251'    , 'CP1125'    ),
+    ('ur'    , 'ur_PK'             , 'CP1256'    , ''          ),
+    ('uz'    , 'uz_UZ'             , 'CP1251'    , 'IBM866'    ),
+    ('uz'    , 'uz_UZ@cyrillic'    , 'CP1254'    , 'IBM857'    ),
+    ('ve'    , 've_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('vi'    , 'vi_VN'             , 'CP1258'    , 'CP1258'    ),
+    ('wa'    , 'wa_BE'             , 'CP1252'    , 'IBM850'    ),
+    ('wa'    , 'wa_BE@euro'        , 'CP1252'    , 'IBM850'    ),
+    ('wo'    , 'wo_SN'             , 'CP1252'    , 'IBM437'    ),
+    ('xh'    , 'xh_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('yi'    , 'yi_US'             , 'CP1252'    , 'IBM437'    ),
+    ('yo'    , 'yo_NG'             , 'CP1252'    , 'IBM437'    ),
+    ('zh'    , 'zh_CN'             , 'CP936'     , 'CP936'     ),
+    ('zh'    , 'zh_HK'             , 'BIG5'      , 'BIG5'      ),
+    ('zh'    , 'zh_SG'             , 'CP936'     , 'CP936'     ),
+    ('zh'    , 'zh_TW'             , 'BIG5'      , 'BIG5'      ),
+    ('zu'    , 'zu_ZA'             , 'CP1252'    , 'IBM437'    ),
+    ('POSIX' , 'POSIX'             , 'CP1252'    , 'IBM437'    )
+  );

+ 45 - 17
components/doublecmd/dcconvertencoding.pas

@@ -274,6 +274,8 @@ end;
 
 {$ELSEIF DEFINED(UNIX)}
 
+{$I dcconvertencoding.inc}
+
 const
   EncodingUTF8 = 'UTF-8'; // UTF-8 Encoding
 
@@ -367,6 +369,33 @@ begin
 end;
 {$ENDIF}
 
+function FindEncoding: Boolean;
+var
+  Index: Integer;
+begin
+  // Try to find by language and country
+  for Index:= Low(charset_relation) to High(charset_relation) do
+  begin
+    if CompareStr(charset_relation[Index, 1], SystemLocale) = 0 then
+    begin
+      EncodingANSI:= charset_relation[Index, 2];
+      EncodingOEM:= charset_relation[Index, 3];
+      Exit(True);
+    end;
+  end;
+  // Try to find by language only
+  for Index:= Low(charset_relation) to High(charset_relation) do
+  begin
+    if CompareStr(charset_relation[Index, 0], SystemLanguage) = 0 then
+    begin
+      EncodingANSI:= charset_relation[Index, 2];
+      EncodingOEM:= charset_relation[Index, 3];
+      Exit(True);
+    end;
+  end;
+  Result:= False;
+end;
+
 function Oem2Utf8(const Source: String): RawByteString;
 begin
   Result:= Source;
@@ -417,7 +446,7 @@ end;
 
 procedure Initialize;
 var
-  Error: String;
+  Error: String = '';
 begin
   CeOemToSys:=   @Dummy;
   CeSysToOem:=   @Dummy;
@@ -437,23 +466,22 @@ begin
     begin
       SystemEncodingUtf8:= (SysUtils.CompareText(SystemEncoding, 'UTF-8') = 0) or
                            (SysUtils.CompareText(SystemEncoding, 'UTF8') = 0);
-      if (SystemLanguage = 'be') or (SystemLanguage = 'ru') or
-         (SystemLanguage = 'uk') then
-      begin
-        EncodingOEM:= 'CP866';
-        CeOemToSys:=  @OEM2Sys;
-        CeSysToOem:=  @Sys2OEM;
-        CeOemToUtf8:= @Oem2Utf8;
-        CeUtf8ToOem:= @Utf82Oem;
-      end;
-      if (SystemLanguage = 'be') or (SystemLanguage = 'bg') or
-         (SystemLanguage = 'ru') or (SystemLanguage = 'uk') then
+      if FindEncoding then
       begin
-        EncodingANSI:= 'CP1251';
-        CeAnsiToSys:=  @Ansi2Sys;
-        CeSysToAnsi:=  @Sys2Ansi;
-        CeAnsiToUtf8:= @Ansi2Utf8;
-        CeUtf8ToAnsi:= @Utf82Ansi;
+        if (Length(EncodingOEM) > 0) then
+        begin
+          CeOemToSys:=  @OEM2Sys;
+          CeSysToOem:=  @Sys2OEM;
+          CeOemToUtf8:= @Oem2Utf8;
+          CeUtf8ToOem:= @Utf82Oem;
+        end;
+        if (Length(EncodingANSI) > 0) then
+        begin
+          CeAnsiToSys:=  @Ansi2Sys;
+          CeSysToAnsi:=  @Sys2Ansi;
+          CeAnsiToUtf8:= @Ansi2Utf8;
+          CeUtf8ToAnsi:= @Utf82Ansi;
+        end;
       end;
       if not SystemEncodingUtf8 then
       begin