# ******************************************************************************
# *
# *   Copyright (C) 1995-2004, International Business Machines
# *   Corporation and others.  All Rights Reserved.
# *
# ******************************************************************************

# If this converter alias table looks very confusing, a much easier to
# understand view can be found at this demo:
# http://oss.software.ibm.com/cgi-bin/icu/convexp

# IMPORTANT NOTE
#
# This file is not read directly by ICU. If you change it, you need to
# run gencnval, and eventually run pkgdata to update the representation that
# ICU uses for aliases. The gencnval tool will normally compile this file into
# cnvalias.icu. The gencnval -v verbose option will help you when you edit
# this file.

# Please be friendly to the rest of us that edit this table by
# keeping this table free of tabs.

# This is an alias file used by the character set converter.
# A lot of converter information can be found in unicode/ucnv.h, but here
# is more information about this file.
#
# Here is the file format using BNF-like syntax:
#
# converterTable ::= tags { converterLine* }
# converterLine ::= converterName [ tags ] { taggedAlias* }'\n'
# taggedAlias ::= alias [ tags ]
# tags ::= '{' { tag+ } '}'
# tag ::= standard['*']
# converterName ::= [0-9a-zA-Z:_'-']+
# alias ::= converterName
#
# Except for the converter name, aliases are case insensitive.
# Names are separated by whitespace.
# Line continuation and comment sytax are similar to the GNU make syntax.
# Any lines beginning with whitespace (e.g. U+0020 SPACE or U+0009 HORIZONTAL
# TABULATION) are presumed to be a continuation of the previous line.
# The # symbol starts a comment and the comment continues till the end of
# the line.
#
# The converter
#
# All names can be tagged by including a space-separated list of tags in
# curly braces, as in ISO_8859-1:1987{IANA*} iso-8859-1 { MIME* } or
# some-charset{MIME* IANA*}. The order of tags does not matter, and
# whitespace is allowed between the tagged name and the tags list.
#
# The tags can be used to get standard names using ucnv_getStandardName().
#
# The complete list of recognized tags used in this file is defined in
# the affinity list near the beginning of the file.
#
# The * after the standard tag denotes that the previous alias is the
# preferred (default) charset name for that standard. There can only
# be one of these default charset names per converter.



# The world is getting more complicated...
# Supporting XML parsers, HTML, MIME, and similar applications
# that mark encodings with a charset name can be difficult.
# Many of these applications and operating systems will update
# their codepages over time.

# It means that a new codepage, one that differs from an
# old one by changing a code point, e.g., to the Euro sign,
# must not get an old alias, because it would mean that
# old files with this alias would be interpreted differently.

# If an codepage gets updated by assigning characters to previously
# unassigned code points, then a new name is not necessary.
# Also, some codepages map unassigned codepage byte values
# to the same numbers in Unicode for roundtripping. It may be
# industry practice to keep the encoding name in such a case, too
# (example: Windows codepages).

# The aliases listed in the list of character sets
# that is maintained by the IANA (http://www.iana.org/) must
# not be changed to mean encodings different from what this
# list shows. Currently, the IANA list is at
# http://www.iana.org/assignments/character-sets
# It should also be mentioned that the exact mapping table used for each
# IANA names usually isn't specified. This means that some other applications
# and operating systems are left to interpret the exact mappings for the
# underspecified aliases. For instance, Shift-JIS on a Solaris platform
# may be different from Shift-JIS on a Windows platform. This is why
# some of the aliases can be tagged to differentiate different mapping
# tables with the same alias. If an alias is given to more than one converter,
# it is considered to be an ambiguous alias, and the affinity list will
# choose the converter to use when a standard isn't specified with the alias.

# Name matching is case-insensitive. Also, dashes '-', underscores '_'
# and spaces ' ' are ignored in names (thus cs-iso_latin-1, csisolatin1
# and "cs iso latin 1" are the same).
# However, the names in the left column are directly file names
# or names of algorithmic converters, and their case must not
# be changed - or else code and/or file names must also be changed.
# For example, the converter ibm-921 is expected to be the file ibm-921.cnv.



# The immediately following list is the affinity list of supported standard tags.
# When multiple converters have the same alias under different standards,
# the standard nearest to the top of this list with that alias will
# be the first converter that will be opened. The ordering of the aliases
# after this affinity list does not affect the preferred alias, but it may
# affect the order of the returned list of aliases for a given converter.
#
# The general ordering is from specific and frequently used to more general
# or rarely used at the bottom.
{   UTR22           # Name format specified by http://www.unicode.org/unicode/reports/tr22/
    # ICU             # Can also use ICU_FEATURE
    IBM             # The IBM CCSID number is specified by ibm-*
    WINDOWS         # The Microsoft code page identifier number is specified by windows-*. The rest are recognized IE names.
    JAVA            # Source: Sun JDK. Alias name case is ignored, but dashes are not ignored.
    # GLIBC
    # AIX
    # DB2
    # SOLARIS
    # APPLE
    # HPUX
    IANA            # Source: http://www.iana.org/assignments/character-sets
    MIME            # Source: http://www.iana.org/assignments/character-sets
    # MSIE            # MSIE is Internet Explorer, which can be different from Windows (From the IMultiLanguage COM interface)
    # ZOS_USS         # z/OS (os/390) Unix System Services (USS), which has NL<->LF swapping. They have the same format as the IBM tag.
    }



# Fully algorithmic converters

UTF-8 { IANA* MIME* JAVA* WINDOWS }
                                ibm-1208 { IBM* }
                                ibm-1209 { IBM }
                                ibm-5304 { IBM }
                                ibm-5305 { IBM }
                                windows-65001 { WINDOWS* }
                                cp1208

# The ICU 2.2 UTF-16/32 converters detect and write a BOM.
UTF-16 { IANA* MIME* JAVA* }    ISO-10646-UCS-2 { IANA } unicode csUnicode ucs-2
UTF-16BE { IANA* MIME* JAVA* }  x-utf-16be { JAVA }
                                # iso-10646-ucs-2 { JAVA } # This is ambiguous
                                ibm-1200 { IBM* }
                                ibm-1201 { IBM }
                                ibm-5297 { IBM }
                                ibm-13488 { IBM }
                                ibm-17584 { IBM }
                                windows-1201 { WINDOWS* }
                                cp1200
                                cp1201
                                UTF16_BigEndian
UTF-16LE { IANA* MIME* JAVA* }  x-utf-16le { JAVA }
                                ibm-1202 { IBM* }
                                ibm-13490 { IBM }
                                ibm-17586 { IBM }
                                UTF16_LittleEndian
                                windows-1200 { WINDOWS* }

UTF-32 { IANA* MIME* }          ISO-10646-UCS-4 { IANA } csUCS4 ucs-4
UTF-32BE { IANA* }              UTF32_BigEndian ibm-1232 { IBM* } ibm-1233 { IBM }
UTF-32LE { IANA* }              UTF32_LittleEndian ibm-1234 { IBM* }

# ICU-specific names for special uses
UTF16_PlatformEndian
UTF16_OppositeEndian

UTF32_PlatformEndian
UTF32_OppositeEndian

# On UTF-7:
# RFC 2152 (http://www.imc.org/rfc2152) allows to encode some US-ASCII
# characters directly or in base64. Especially, the characters in set O
# as defined in the RFC (!"#$%&*;<=>@[]^_`{|}) may be encoded directly
# but are not allowed in, e.g., email headers.
# By default, the ICU UTF-7 converter encodes set O directly.
# By choosing the option "version=1", set O will be escaped instead.
# For example:
#     utf7Converter=ucnv_open("UTF-7,version=1");
#
# For details about email headers see RFC 2047.
UTF-7 { IANA* MIME* WINDOWS }   windows-65000 { WINDOWS* }

# IMAP-mailbox-name is an ICU-specific name for the encoding of IMAP mailbox names.
# It is a substantially modified UTF-7 encoding. See the specification in:
#
# RFC 2060: INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
# (http://www.ietf.org/rfc/rfc2060.txt)
# Section 5.1.3.  Mailbox International Naming Convention
IMAP-mailbox-name

SCSU { IANA* }
BOCU-1 { IANA* } csBOCU-1 { IANA }

# See http://www.unicode.org/unicode/reports/tr26 for this Compatibility Encoding Scheme for UTF-16
# The Unicode Consortium does not encourage the use of CESU-8
CESU-8 { IANA* }

# Standard iso-8859-1, which does not have the Euro update.
# See iso-8859-15 (latin9) for the Euro update
ISO-8859-1 { MIME* IANA JAVA* }
    ibm-819 { IBM* JAVA }    # This is not truely ibm-819 because it's missing the fallbacks.
    IBM819 { IANA }
    cp819 { IANA JAVA }
    latin1 { IANA JAVA }
    8859_1 { JAVA }
    csISOLatin1 { IANA JAVA }
    iso-ir-100 { IANA JAVA }
    ISO_8859-1:1987 { IANA* JAVA }
    l1 { IANA JAVA }
    819 { JAVA }
    # windows-28591 { WINDOWS* } # This has odd behavior because it has the Euro update, which isn't correct.
    # LATIN_1     # Old ICU name
    # ANSI_X3.110-1983  # This is for a different IANA alias.  This isn't iso-8859-1.

US-ASCII { MIME* IANA JAVA WINDOWS }
    ASCII { JAVA* IANA WINDOWS }
    ANSI_X3.4-1968 { IANA* WINDOWS }
    ANSI_X3.4-1986 { IANA WINDOWS }
    ISO_646.irv:1991 { IANA WINDOWS }
    iso_646.irv:1983 { JAVA }
    ISO646-US { JAVA IANA WINDOWS }
    us { IANA }
    csASCII { IANA WINDOWS }
    iso-ir-6 { IANA }
    cp367 { IANA WINDOWS }
    ascii7 { JAVA }
    646 { JAVA }
    windows-20127 { WINDOWS* }
    # IBM367 { IANA WINDOWS } # This isn't the default ibm-367.

# GB 18030 is partly algorithmic, using the MBCS converter
gb18030 { IANA* }       ibm-1392 { IBM* } windows-54936 { WINDOWS* }

# Table-based interchange codepages

ibm-367_P100-1995 { UTR22* }    ibm-367 { IBM* } IBM367 { IANA* }   # This is ASCII, but it has fallbacks

# Central Europe
ibm-912_P100-1995 { UTR22* }
                        ibm-912 { IBM* JAVA }
                        iso-8859-2 { MIME* IANA JAVA* WINDOWS }
                        ISO_8859-2:1987 { IANA* WINDOWS JAVA }
                        latin2 { IANA WINDOWS JAVA }
                        csISOLatin2 { IANA WINDOWS JAVA }
                        iso-ir-101 { IANA WINDOWS JAVA }
                        l2 { IANA WINDOWS JAVA }
                        8859_2 { JAVA }
                        cp912 { JAVA }
                        912 { JAVA }
                        windows-28592 { WINDOWS* }

# Maltese Esperanto
ibm-913_P100-2000 { UTR22* }
                        ibm-913 { IBM* JAVA }
                        iso-8859-3 { MIME* IANA WINDOWS JAVA* }
                        ISO_8859-3:1988 { IANA* WINDOWS JAVA }
                        latin3 { IANA JAVA WINDOWS }
                        csISOLatin3 { IANA WINDOWS }
                        iso-ir-109 { IANA WINDOWS JAVA }
                        l3 { IANA WINDOWS JAVA }
                        8859_3 { JAVA }
                        cp913 { JAVA }
                        913 { JAVA }
                        windows-28593 { WINDOWS* }

# Baltic
ibm-914_P100-1995 { UTR22* }
                        ibm-914 { IBM* JAVA }
                        iso-8859-4 { MIME* IANA WINDOWS JAVA* }
                        latin4 { IANA WINDOWS JAVA }
                        csISOLatin4 { IANA WINDOWS JAVA }
                        iso-ir-110 { IANA WINDOWS JAVA }
                        ISO_8859-4:1988 { IANA* WINDOWS JAVA }
                        l4 { IANA WINDOWS JAVA }
                        8859_4 { JAVA }
                        cp914 { JAVA }
                        914 { JAVA }
                        windows-28594 { WINDOWS* }

# Cyrillic
ibm-915_P100-1995 { UTR22* }
                        ibm-915 { IBM* JAVA }
                        iso-8859-5 { MIME* IANA WINDOWS JAVA* }
                        cyrillic { IANA WINDOWS JAVA }
                        csISOLatinCyrillic { IANA WINDOWS JAVA }
                        iso-ir-144 { IANA WINDOWS JAVA }
                        ISO_8859-5:1988 { IANA* WINDOWS JAVA }
                        8859_5 { JAVA }
                        cp915 { JAVA }
                        915 { JAVA }
                        windows-28595 { WINDOWS* }

# Arabic
# ISO_8859-6-E and ISO_8859-6-I are similar to this charset, but BiDi is done differently
# From a narrow mapping point of view, there is no difference.
# -E means explicit. -I means implicit.
# -E requires the client to handle the ISO 6429 bidirectional controls
ibm-1089_P100-1995 { UTR22* }
                        ibm-1089 { IBM* JAVA }
                        iso-8859-6 { MIME* IANA WINDOWS JAVA* }
                        arabic { IANA WINDOWS JAVA }
                        csISOLatinArabic { IANA WINDOWS JAVA }
                        iso-ir-127 { IANA WINDOWS JAVA }
                        ISO_8859-6:1987 { IANA* WINDOWS JAVA }
                        ECMA-114 { IANA JAVA }
                        ASMO-708 { IANA JAVA }
                        8859_6 { JAVA }
                        cp1089 { JAVA }
                        1089 { JAVA }
                        windows-28596 { WINDOWS* }
                        ISO-8859-6-I { IANA MIME } # IANA considers this alias different and BiDi needs to be applied.
                        ISO-8859-6-E { IANA MIME } # IANA considers this alias different and BiDi needs to be applied.

# ISO Greek (w/o euro update)
ibm-813_P100-1995 { UTR22* }
                        ibm-813 { IBM* JAVA }
                        iso-8859-7 { MIME* IANA WINDOWS JAVA* }
                        greek { IANA WINDOWS JAVA }
                        greek8 { IANA WINDOWS JAVA }
                        ELOT_928 { IANA WINDOWS JAVA }
                        ECMA-118 { IANA WINDOWS JAVA }
                        csISOLatinGreek { IANA WINDOWS JAVA }
                        iso-ir-126 { IANA WINDOWS JAVA }
                        ISO_8859-7:1987 { IANA* WINDOWS JAVA }
                        8859_7 { JAVA }
                        cp813 { JAVA }
                        813 { JAVA }
                        windows-28597 { WINDOWS* }

# hebrew
# ISO_8859-8-E and ISO_8859-8-I are similar to this charset, but BiDi is done differently
# From a narrow mapping point of view, there is no difference.
# -E means explicit. -I means implicit.
# -E requires the client to handle the ISO 6429 bidirectional controls
ibm-916_P100-1995 { UTR22* }
                        ibm-916 { IBM* JAVA }
                        iso-8859-8 { MIME* IANA WINDOWS JAVA* }
                        hebrew { IANA WINDOWS JAVA }
                        csISOLatinHebrew { IANA WINDOWS JAVA }
                        iso-ir-138 { IANA WINDOWS JAVA }
                        ISO_8859-8:1988 { IANA* WINDOWS JAVA }
                        ISO-8859-8-I { IANA MIME } # IANA and Windows considers this alias different and BiDi needs to be applied.
                        ISO-8859-8-E { IANA MIME } # IANA and Windows considers this alias different and BiDi needs to be applied.
                        8859_8 { JAVA }
                        cp916 { JAVA }
                        916 { JAVA }
                        windows-28598 { WINDOWS* }

# Turkish
ibm-920_P100-1995 { UTR22* }
                        ibm-920 { IBM* JAVA }
                        iso-8859-9 { MIME* IANA WINDOWS JAVA* }
                        latin5 { IANA WINDOWS JAVA }
                        csISOLatin5 { IANA JAVA }
                        iso-ir-148 { IANA WINDOWS JAVA }
                        ISO_8859-9:1989 { IANA* WINDOWS }
                        l5 { IANA WINDOWS JAVA }
                        8859_9 { JAVA }
                        cp920 { JAVA }
                        920 { JAVA }
                        windows-28599 { WINDOWS* }
                        ECMA-128    # IANA doesn't have this alias 6/24/2002

# iso-8859-13, PC Baltic (w/o euro update)
ibm-921_P100-1995 { UTR22* }
                        ibm-921 { IBM* }
                        iso-8859-13 { IANA* MIME* JAVA* }
                        8859_13 { JAVA }
                        cp921
                        921

# Latin 9
ibm-923_P100-1998 { UTR22* }
                        ibm-923 { IBM* JAVA }
                        iso-8859-15 { IANA* MIME* WINDOWS JAVA* }
                        Latin-9 { IANA WINDOWS }
                        l9 { WINDOWS }
                        8859_15 { JAVA }
                        latin0 { JAVA }
                        csisolatin0 { JAVA }
                        csisolatin9 { JAVA }
                        iso8859_15_fdis { JAVA }
                        cp923 { JAVA }
                        923 { JAVA }
                        windows-28605 { WINDOWS* }

# CJK encodings

ibm-942_P12A-1999 { UTR22* }    # ibm-942_P120 is a rarely used alternate mapping (sjis78 is already old)
                        ibm-942 { IBM* }
                        ibm-932 { IBM }
                        cp932
                        shift_jis78
                        sjis78
                        ibm-942_VSUB_VPUA
                        ibm-932_VSUB_VPUA
                        # Is this "JIS_C6226-1978"?

# ibm-943_P15A-2003 differs from windows-932-2000 only in a few roundtrip mappings:
# - the usual IBM PC control code rotation (1A-1C-7F)
# - the Windows table has roundtrips for bytes 80, A0, and FD-FF to U+0080 and PUA
ibm-943_P15A-2003 { UTR22* }
                        ibm-943 # Leave untagged because this isn't the default
                        Shift_JIS { IANA* MIME* WINDOWS JAVA }
                        MS_Kanji { IANA WINDOWS JAVA }
                        csShiftJIS { IANA WINDOWS JAVA }
                        windows-31j { IANA JAVA } # A further extension of Shift_JIS to include NEC special characters (Row 13)
                        csWindows31J { IANA WINDOWS JAVA } # A further extension of Shift_JIS to include NEC special characters (Row 13)
                        x-sjis { WINDOWS JAVA }
                        x-ms-cp932 { WINDOWS }
                        cp932 { WINDOWS }
                        windows-932 { WINDOWS* }
                        cp943c { JAVA* }    # This is slightly different, but the backslash mapping is the same.
                        IBM-943C #{ AIX* } # Add this tag once AIX aliases becomes available
                        ms932
                        pck     # Probably SOLARIS
                        sjis    # This might be for ibm-1351
                        ibm-943_VSUB_VPUA
                        # cp943 # This isn't Windows, and no one else uses it.
                        # IANA says that Windows-31J is an extension to csshiftjis ibm-932 
ibm-943_P130-1999 { UTR22* }
                        ibm-943 { IBM* JAVA }
                        Shift_JIS # Leave untagged because this isn't the default
                        cp943 { JAVA* }    # This is slightly different, but the backslash mapping is the same.
                        943 { JAVA }
                        ibm-943_VASCII_VSUB_VPUA
                        # japanese. Unicode name is \u30b7\u30d5\u30c8\u7b26\u53f7\u5316\u8868\u73fe
ibm-33722_P12A-1999 { UTR22* }
                        ibm-33722   # Leave untagged because this isn't the default
                        ibm-5050    # Leave untagged because this isn't the default, and yes this alias is correct
                        EUC-JP { IANA MIME* WINDOWS JAVA* }
                        Extended_UNIX_Code_Packed_Format_for_Japanese { IANA* WINDOWS JAVA }
                        csEUCPkdFmtJapanese { IANA WINDOWS JAVA }
                        X-EUC-JP { WINDOWS JAVA }   # Japan EUC. x-euc-jp is a MIME name
                        eucjis { JAVA }
                        windows-51932 { WINDOWS* }
                        ibm-33722_VPUA
                        IBM-eucJP
ibm-33722_P120-1999 { UTR22* }  # Japan EUC with \ <-> Yen mapping
                        ibm-33722 { IBM* JAVA }
                        ibm-5050 { IBM }    # Yes this is correct
                        cp33722 { JAVA* }
                        33722 { JAVA }
                        ibm-33722_VASCII_VPUA
# ibm-954 seems to be almost a superset of ibm-33722
ibm-954_P101-2000 { UTR22* }
                        ibm-954 { IBM* }
                        EUC-JP # This is Solaris EUC-JP.
                        # eucJP # A closer Solaris alias

ibm-1373_P100-2002 { UTR22* }               # Taiwan Big-5 (w/ euro update)
                        ibm-1373 { IBM* }
                        windows-950 # Alternate mapping. Leave untagged. This is the IBM interpretation of a Windows codepage.
windows-950-2000 { UTR22* }
                        Big5 { IANA* MIME* JAVA* WINDOWS }
                        csBig5 { IANA WINDOWS }
                        windows-950 { WINDOWS* }
                        x-big5
ibm-950_P110-1999 { UTR22* }                # Taiwan Big-5 (w/o euro update)
                        ibm-950 { IBM* JAVA }
                        cp950 { JAVA* }
                        950 { JAVA }
macos-2566-10.2 { UTR22* }      # This uses supplementary characters.
                        Big5-HKSCS { IANA* JAVA* }
                        big5hk { JAVA }
                        HKSCS-BIG5  # From http://www.openi18n.org/localenameguide/
                        # big5-hkscs:unicode3.0 # This is actually post 3.0 data, which has different mappings
ibm-1375_P100-2003 { UTR22* }   # IBM's interpretation of Windows' Taiwan Big-5 w/ HKSCS extensions
                        ibm-1375 { IBM* }
                        Big5-HKSCS
                        # windows-950 # Windows-950 can be w/ or w/o HKSCS extensions. By default it's not.
                        # windows-950_hkscs

ibm-1386_P100-2002  { UTR22* }
                        ibm-1386 { IBM* JAVA }
                        cp1386 { JAVA* }
                        windows-936 # Alternate mapping. Leave untagged. This is the IBM interpretation of a Windows codepage.
                        ibm-1386_VSUB_VPUA
                        # zh_cn

windows-936-2000 { UTR22* }
                        GBK { IANA* WINDOWS }
                        CP936 { IANA }
                        MS936 { IANA }
                        windows-936 { IANA WINDOWS* }

ibm-1383_P110-1999 { UTR22* }       # China EUC.
                        ibm-1383 { IBM* }
                        GB2312 { IANA* MIME* }
                        csGB2312 { IANA }
                        EUC-CN  # According to other platforms, windows-20936 looks more like euc-cn. x-euc-cn is also a MIME name
                        ibm-eucCN
                        hp15CN  # From HP-UX?
                        cp1383
                        1383
                        ibm-1383_VPUA
                        # gb          # This is not an IANA name. gb in IANA means Great Britain.

ibm-5478_P100-1995 { UTR22* } ibm-5478 { IBM* } # This gb_2312_80 DBCS mapping is needed by iso-2022.
                        GB_2312-80 { IANA* }    # Windows maps this alias incorrectly
                        chinese { IANA }
                        iso-ir-58 { IANA }
                        csISO58GB231280 { IANA }
                        gb2312-1980
                        GB2312.1980-0   # From X11R6

ibm-964_P110-1999 { UTR22* }                # Taiwan EUC. x-euc-tw is a MIME name
                        ibm-964 { IBM* JAVA }
                        EUC-TW
                        ibm-eucTW
                        cns11643 
                        cp964 { JAVA* }
                        964 { JAVA }
                        ibm-964_VPUA

# ISO-2022 needs one, and other people may need others.
ibm-949_P110-1999 { UTR22* }
                        ibm-949 { IBM* JAVA }
                        cp949 { JAVA* }
                        949 { JAVA }
                        ibm-949_VASCII_VSUB_VPUA
ibm-949_P11A-1999 { UTR22* }
                        ibm-949 # Leave untagged because this isn't the default
                        cp949c { JAVA* }
                        ibm-949_VSUB_VPUA

# Korean EUC.
#
# <quote from="Jungshik Shin">
# EUC-KR = KS X 1003/ISO 646-KR or ISO 646-IRV/US-ASCII in GL and KS X 1001:1998 (formerly KS C 5601-1987) in GR.
#
# Although widely spread on MS Windows, using 
# KS C 5601 or related names to denote EUC-KR or
# windows-949 is very much misleading. KS C 5601-1987
# is NOT suitable as a designation for MIME charset
# and MBCS. It's just the name of a 94 x 94 Korean 
# coded character set standard which can be invoked
# on either GL (with MSB reset) or GR (with MSB set).
# Note that JOHAB (windows-1361) specified in 
# KS X 1001:1998 annex 3 (KS C 5601-1992 annex 3) 
# is a _seprate_ MBCS with a _completely different_
# mapping.
# </quote>
#
# The following aliases tries to mirror the poor state of alias recognition
# on these platforms.
#
# ibm-970 is almost a subset of ibm-1363.
# Java, Solaris and AIX use euc-kr to also mean ksc5601.
ibm-970_P110-1995 { UTR22* }
                        ibm-970 { IBM* JAVA }
                        EUC-KR { IANA* MIME* WINDOWS JAVA* }
                        KS_C_5601-1987 { JAVA }
                        windows-51949 { WINDOWS* }
                        csEUCKR { IANA WINDOWS }  # x-euc-kr is also a MIME name
                        ibm-eucKR { JAVA }
                        KSC_5601 { JAVA } # Needed by iso-2022
                        5601 { JAVA }
                        ibm-970_VPUA

# ibm-971 is almost the set of DBCS mappings of ibm-970
ibm-971_P100-1995       ibm-971 { IBM* } ibm-971_VPUA

# Java, Solaris and AIX use euc-kr to also mean ksc5601, and _sometimes_ for Windows too.
# ibm-1363 is almost a superset of ibm-970.
ibm-1363_P11B-1998 { UTR22* }
                        ibm-1363 # Leave untagged because this isn't the default
                        KS_C_5601-1987 { IANA* }
                        KS_C_5601-1989 { IANA }
                        KSC_5601 { MIME* IANA } # Needed by iso-2022
                        csKSC56011987 { IANA }
                        korean { IANA }
                        iso-ir-149 { IANA }
                        5601
                        cp1363
                        ksc
                        windows-949 # Alternate mapping. Leave untagged. This is the IBM interpretation of a Windows codepage.
                        ibm-1363_VSUB_VPUA
                        # ks_x_1001:1992
                        # ksc5601-1992

ibm-1363_P110-1997 { UTR22* } # Korean KSC MBCS with \ <-> Won mapping
                        ibm-1363 { IBM* }
                        ibm-1363_VASCII_VSUB_VPUA

windows-949-2000 { UTR22* }
                        windows-949 { JAVA* WINDOWS* }
                        KS_C_5601-1987 { WINDOWS }
                        KS_C_5601-1989 { WINDOWS }
                        KSC_5601 { WINDOWS } # Needed by iso-2022
                        csKSC56011987 { WINDOWS }
                        korean { WINDOWS }
                        iso-ir-149 { WINDOWS }
                        ms949 { JAVA }

ibm-1162_P100-1999 { UTR22* }   # Thai (w/ euro update)
                        ibm-1162 { IBM* }

ibm-874_P100-1995 { UTR22* }    # Thai PC (w/o euro update).
                        ibm-874 { IBM* JAVA }
                        ibm-9066 { IBM }    # Yes ibm-874 == ibm-9066. ibm-1161 has the euro update.
                        cp874 { JAVA* }
                        TIS-620 { IANA* JAVA }  # This actually separate from ibm-874, which is similar to this table
                        tis620.2533 { JAVA }    # This actually separate from ibm-874, which is similar to this table
                        eucTH               # eucTH is an unusual alias from Solaris.  eucTH has fewer mappings than TIS620
                        cp9066

windows-874-2000 { UTR22* }   # Thai (w/ euro update)
                        TIS-620 { WINDOWS }
                        windows-874 { JAVA* WINDOWS* }
                        MS874 { JAVA }
                        # iso-8859-11 { WINDOWS } # iso-8859-11 is similar to TIS-620. ibm-13162 is a closer match.

# Platform codepages
ibm-437_P100-1995 { UTR22* }    ibm-437 { IBM* } IBM437 { IANA* WINDOWS JAVA } cp437 { IANA WINDOWS JAVA* } 437 { IANA WINDOWS JAVA } csPC8CodePage437 { IANA JAVA } windows-437 { WINDOWS* }  # PC US
ibm-850_P100-1995 { UTR22* }    ibm-850 { IBM* } IBM850 { IANA* WINDOWS JAVA } cp850 { IANA MIME* WINDOWS JAVA* } 850 { IANA JAVA } csPC850Multilingual { IANA JAVA } windows-850 { WINDOWS* } # PC latin1
ibm-851_P100-1995 { UTR22* }    ibm-851 { IBM* } IBM851 { IANA* } cp851 { IANA MIME* } 851 { IANA } csPC851 { IANA }             # PC DOS Greek (w/o euro)
ibm-852_P100-1995 { UTR22* }    ibm-852 { IBM* } IBM852 { IANA* WINDOWS JAVA } cp852 { IANA WINDOWS JAVA* } 852 { IANA WINDOWS JAVA } csPCp852 { IANA JAVA } windows-852 { WINDOWS* } # PC latin2 (w/o euro update)
ibm-855_P100-1995 { UTR22* }    ibm-855 { IBM* } IBM855 { IANA* } cp855 { IANA } 855 { IANA } csIBM855 { IANA } csPCp855 # PC cyrillic (w/o euro update)
ibm-856_P100-1995 { UTR22* }    ibm-856 { IBM* JAVA } cp856 { MIME* JAVA* } 856 { JAVA }  # PC Hebrew (old)
ibm-857_P100-1995 { UTR22* }    ibm-857 { IBM* } IBM857 { IANA* WINDOWS JAVA } cp857 { IANA MIME* JAVA* } 857 { IANA JAVA } csIBM857 { IANA JAVA } windows-857 { WINDOWS* }   # PC Latin 5 (w/o euro update)
ibm-858_P100-1997 { UTR22* }    ibm-858 { IBM* JAVA* } IBM00858 { IANA* } CCSID00858 { IANA } CP00858 { IANA } PC-Multilingual-850+euro { IANA } cp858 { MIME* }  # PC latin1 with Euro
ibm-860_P100-1995 { UTR22* }    ibm-860 { IBM* } IBM860 { IANA* JAVA } cp860 { IANA MIME* JAVA* } 860 { IANA JAVA } csIBM860 { IANA JAVA }    # PC Portugal
ibm-861_P100-1995 { UTR22* }    ibm-861 { IBM* } IBM861 { IANA* WINDOWS JAVA } cp861 { IANA MIME* JAVA* } 861 { IANA JAVA } cp-is { IANA JAVA } csIBM861 { IANA JAVA } windows-861 { WINDOWS* } # PC Iceland
ibm-862_P100-1995 { UTR22* }    ibm-862 { IBM* } IBM862 { IANA* JAVA } cp862 { IANA MIME* JAVA* } 862 { IANA JAVA } csPC862LatinHebrew { IANA JAVA } DOS-862 { WINDOWS } windows-862 { WINDOWS* }    # PC Hebrew (w/o euro update)
ibm-863_P100-1995 { UTR22* }    ibm-863 { IBM* } IBM863 { IANA* JAVA } cp863 { IANA MIME* JAVA* } 863 { IANA JAVA } csIBM863 { IANA JAVA }    # PC Canadian French
ibm-864_X110-1999 { UTR22* }    ibm-864 { IBM* } IBM864 { IANA* JAVA } cp864 { IANA MIME* JAVA* } csIBM864 { IANA JAVA } # PC Arabic (w/o euro update)
ibm-865_P100-1995 { UTR22* }    ibm-865 { IBM* } IBM865 { IANA* JAVA } cp865 { IANA MIME* JAVA* } 865 { IANA JAVA } csIBM865 { IANA JAVA }    # PC Nordic
ibm-866_P100-1995 { UTR22* }    ibm-866 { IBM* } IBM866 { IANA* JAVA } cp866 { IANA MIME* WINDOWS JAVA* } 866 { IANA JAVA } csIBM866 { IANA JAVA } windows-866 { WINDOWS* } # PC Russian (w/o euro update)
ibm-867_P100-1998 { UTR22* }    ibm-867 { IBM* } cp867   # PC Hebrew (w/ euro update) Updated version of ibm-862
ibm-868_P100-1995 { UTR22* }    ibm-868 { IBM* } IBM868 { IANA* JAVA } CP868 { IANA MIME* JAVA* } 868 { JAVA } csIBM868 { IANA } cp-ar { IANA }          # PC Urdu
ibm-869_P100-1995 { UTR22* }    ibm-869 { IBM* } IBM869 { IANA* WINDOWS JAVA } cp869 { IANA MIME* JAVA* } 869 { IANA JAVA } cp-gr { IANA JAVA } csIBM869 { IANA JAVA } windows-869 { WINDOWS* } # PC Greek (w/o euro update)
ibm-878_P100-1996 { UTR22* }    ibm-878 { IBM* } KOI8-R { IANA* MIME* JAVA* } koi8 { JAVA } csKOI8R { IANA JAVA } cp878   # Russian internet
ibm-901_P100-1999 { UTR22* }    ibm-901 { IBM* } # PC Baltic (w/ euro update), update of ibm-921
ibm-902_P100-1999 { UTR22* }    ibm-902 { IBM* } # PC Estonian (w/ euro update), update of ibm-922
ibm-922_P100-1999 { UTR22* }    ibm-922 { IBM* JAVA }   cp922 { MIME* JAVA* } 922 { JAVA } # PC Estonian (w/o euro update)
ibm-4909_P100-1999 { UTR22* }   ibm-4909 { IBM* } # ISO Greek (w/ euro update), update of ibm-813

# The cp aliases in this section aren't really windows aliases, but it was used by ICU for Windows.
# cp is used to denote IBM in Java, and that is why we don't do that anymore.
# The windows-* aliases mean windows codepages.
ibm-5346_P100-1998 { UTR22* }   ibm-5346 { IBM* } windows-1250 { IANA* JAVA* WINDOWS* } cp1250 { WINDOWS }  # Windows Latin2 (w/ euro update)
ibm-5347_P100-1998 { UTR22* }   ibm-5347 { IBM* } windows-1251 { IANA* JAVA* WINDOWS* } cp1251 { WINDOWS }  # Windows Cyrillic (w/ euro update)
ibm-5348_P100-1997 { UTR22* }   ibm-5348 { IBM* } windows-1252 { IANA* JAVA* WINDOWS* } cp1252 { WINDOWS }  # Windows Latin1 (w/ euro update)
ibm-5349_P100-1998 { UTR22* }   ibm-5349 { IBM* } windows-1253 { IANA* JAVA* WINDOWS* } cp1253 { WINDOWS }  # Windows Greek (w/ euro update)
ibm-5350_P100-1998 { UTR22* }   ibm-5350 { IBM* } windows-1254 { IANA* JAVA* WINDOWS* } cp1254 { WINDOWS }  # Windows Turkish (w/ euro update)
ibm-9447_P100-2002 { UTR22* }   ibm-9447 { IBM* } windows-1255 { IANA* JAVA* WINDOWS* } cp1255 { WINDOWS }  # Windows Hebrew (w/ euro update)
windows-1256-2000 { UTR22* }    windows-1256 { IANA* JAVA* WINDOWS* } cp1256 { WINDOWS }                    # Windows Arabic (w/ euro update)
ibm-9449_P100-2002 { UTR22* }   ibm-9449 { IBM* } windows-1257 { IANA* JAVA* WINDOWS* } cp1257 { WINDOWS }  # Windows Baltic (w/ euro update)
ibm-5354_P100-1998 { UTR22* }   ibm-5354 { IBM* } windows-1258 { IANA* JAVA* WINDOWS* } cp1258 { WINDOWS }  # Windows Vietnamese (w/ euro update)

# These tables are out of date, and most don't have the Euro
# Leave the windows- variants untagged. They are alternate tables of the newer ones above.
ibm-1250_P100-1995 { UTR22* }   ibm-1250 { IBM* } windows-1250  # Old Windows Latin2 (w/o euro update)
ibm-1251_P100-1995 { UTR22* }   ibm-1251 { IBM* } windows-1251  # Old Windows Cyrillic (w/o euro update)
ibm-1252_P100-2000 { UTR22* }   ibm-1252 { IBM* } windows-1252  # Old Windows Latin 1 without Euro
ibm-1253_P100-1995 { UTR22* }   ibm-1253 { IBM* } windows-1253  # Old Windows Greek (w/o euro update)
ibm-1254_P100-1995 { UTR22* }   ibm-1254 { IBM* } windows-1254  # Old Windows Turkish (w/o euro update)
ibm-1255_P100-1995 { UTR22* }   ibm-1255 { IBM* }               # Very old Windows Hebrew (w/o euro update)
ibm-5351_P100-1998 { UTR22* }   ibm-5351 { IBM* } windows-1255  # Old Windows Hebrew (w/ euro update)
ibm-1256_P110-1997 { UTR22* }   ibm-1256 { IBM* }               # Old Windows Arabic (w/o euro update)
ibm-5352_P100-1998 { UTR22* }   ibm-5352 { IBM* } windows-1256  # Somewhat old Windows Arabic (w/ euro update)
ibm-1257_P100-1995 { UTR22* }   ibm-1257 { IBM* }               # Old Windows Baltic (w/o euro update)
ibm-5353_P100-1998 { UTR22* }   ibm-5353 { IBM* } windows-1257  # Somewhat old Windows Baltic (w/ euro update)
ibm-1258_P100-1997 { UTR22* }   ibm-1258 { IBM* } windows-1258  # Old Windows Vietnamese (w/o euro update)

macos-0_2-10.2 { UTR22* }       macintosh { IANA* MIME* WINDOWS } mac { IANA } csMacintosh { IANA } windows-10000 { WINDOWS* } # Apple latin 1
macos-6-10.2 { UTR22* }         x-mac-greek { MIME* WINDOWS } windows-10006 { WINDOWS* } macgr           # Apple Greek
macos-7_3-10.2 { UTR22* }       x-mac-cyrillic { MIME* WINDOWS } windows-10007 { WINDOWS* } maccy        # Apple Cyrillic
macos-29-10.2 { UTR22* }        x-mac-centraleurroman { MIME* } windows-10029 { WINDOWS* } x-mac-ce { WINDOWS } macce   # Apple Central Europe
macos-35-10.2 { UTR22* }        x-mac-turkish { MIME* WINDOWS } windows-10081 { WINDOWS* } mactr         # Apple Turkish

ibm-1051_P100-1995 { UTR22* }   ibm-1051 { IBM* } hp-roman8 { IANA* } roman8 { IANA } r8 { IANA } csHPRoman8 { IANA }   # HP Latin1
ibm-1276_P100-1995 { UTR22* }   ibm-1276 { IBM* } Adobe-Standard-Encoding { IANA* } csAdobeStandardEncoding { IANA } # Different from ISO-Unicode-IBM-1276 (GCSGID: 1276)
ibm-1277_P100-1995 { UTR22* }   ibm-1277 { IBM* } Adobe-Latin1-Encoding

ibm-1006_P100-1995 { UTR22* }   ibm-1006 { IBM* JAVA } cp1006 { JAVA* } 1006 { JAVA }   # Urdu
ibm-1098_P100-1995 { UTR22* }   ibm-1098 { IBM* JAVA } cp1098 { JAVA* } 1098 { JAVA }   # PC Farsi
ibm-1124_P100-1996 { UTR22* }   ibm-1124 { IBM* JAVA } cp1124 { JAVA* } 1124 { JAVA }   # ISO Cyrillic Ukraine
ibm-1125_P100-1997 { UTR22* }   ibm-1125 { IBM* JAVA } cp1125 { JAVA* }                 # Cyrillic Ukraine PC
ibm-1129_P100-1997 { UTR22* }   ibm-1129 { IBM* }                                       # ISO Vietnamese
ibm-1131_P100-1997 { UTR22* }   ibm-1131 { IBM* JAVA } cp1131 { JAVA* }                 # Cyrillic Belarus PC
ibm-1133_P100-1997 { UTR22* }   ibm-1133 { IBM* }                                       # ISO Lao
ibm-1381_P110-1999 { UTR22* }   ibm-1381 { IBM* JAVA } cp1381 { JAVA* } 1381 { JAVA }   # S-Ch PC Data mixed (IBM GB) 


# Partially algorithmic converters

# [U_ENABLE_GENERIC_ISO_2022]
# The _generic_ ISO-2022 converter is disabled starting 2003-dec-03 (ICU 2.8).
# For details see the icu mailing list from 2003-dec-01 and the ucnv2022.c file.
# Language-specific variants of ISO-2022 continue to be available as listed below.
# ISO_2022                         ISO-2022 { MIME* } 2022 cp2022

ISO_2022,locale=ja,version=0    ISO-2022-JP { IANA* MIME* JAVA* } csISO2022JP { JAVA } 
ISO_2022,locale=ja,version=1    ISO-2022-JP-1 JIS JIS_Encoding { IANA* }
ISO_2022,locale=ja,version=2    ISO-2022-JP-2 { IANA* MIME* } csISO2022JP2
ISO_2022,locale=ja,version=3    JIS7 csJISEncoding
ISO_2022,locale=ja,version=4    JIS8
ISO_2022,locale=ko,version=0    ISO-2022-KR { IANA* MIME* } csISO2022KR # This uses ibm-949
ISO_2022,locale=ko,version=1    ibm-25546
ISO_2022,locale=zh,version=0    ISO-2022-CN { IANA* MIME* } # csISO2022CN
ISO_2022,locale=zh,version=1    ISO-2022-CN-EXT { IANA* MIME* }
HZ                              HZ-GB-2312 { IANA* MIME* }

# Part of iso-2022
ibm-897_P100-1995 { UTR22* }    ibm-897 { IBM* } JIS_X0201 { IANA* } X0201 { IANA } csHalfWidthKatakana { IANA }


ISCII,version=0         x-iscii-de { WINDOWS } windows-57002 { WINDOWS* } iscii-dev
ISCII,version=1         x-iscii-be { WINDOWS } windows-57003 { WINDOWS* } iscii-bng windows-57006 { WINDOWS } x-iscii-as { WINDOWS } # be is different from as on Windows.
ISCII,version=2         x-iscii-pa { WINDOWS } windows-57011 { WINDOWS* } iscii-gur
ISCII,version=3         x-iscii-gu { WINDOWS } windows-57010 { WINDOWS* } iscii-guj
ISCII,version=4         x-iscii-or { WINDOWS } windows-57007 { WINDOWS* } iscii-ori
ISCII,version=5         x-iscii-ta { WINDOWS } windows-57004 { WINDOWS* } iscii-tml
ISCII,version=6         x-iscii-te { WINDOWS } windows-57005 { WINDOWS* } iscii-tlg
ISCII,version=7         x-iscii-ka { WINDOWS } windows-57008 { WINDOWS* } iscii-knd
ISCII,version=8         x-iscii-ma { WINDOWS } windows-57009 { WINDOWS* } iscii-mlm

# Lotus specific
LMBCS-1                 lmbcs
LMBCS-2
LMBCS-3
LMBCS-4
LMBCS-5
LMBCS-6
LMBCS-8
LMBCS-11
LMBCS-16
LMBCS-17
LMBCS-18
LMBCS-19

# EBCDIC codepages according to the CDRA

# without Euro
ibm-37_P100-1995 { UTR22* }              # EBCDIC US
                        ibm-37 { IBM* }
                        IBM037 { IANA* }
                        ibm-037 { JAVA }
                        ebcdic-cp-us { IANA }
                        ebcdic-cp-ca { IANA }
                        ebcdic-cp-wt { IANA }
                        ebcdic-cp-nl { IANA }
                        csIBM037 { IANA }
                        cp037 { JAVA* }
                        037 { JAVA }
                        cpibm37
                        cp37

ibm-273_P100-1995 { UTR22* }    ibm-273 { IBM* } IBM273 { IANA* JAVA } CP273 { IANA JAVA* } csIBM273 { IANA } ebcdic-de cpibm273 273 # EBCDIC Germanay, Austria
ibm-277_P100-1995 { UTR22* }    ibm-277 { IBM* } IBM277 { IANA* JAVA } cp277 { JAVA* } EBCDIC-CP-DK { IANA } EBCDIC-CP-NO { IANA } csIBM277 { IANA } ebcdic-dk cpibm277 277 # EBCDIC Denmark
ibm-278_P100-1995 { UTR22* }    ibm-278 { IBM* } IBM278 { IANA* JAVA } cp278 { JAVA* } ebcdic-cp-fi { IANA } ebcdic-cp-se { IANA } csIBM278 { IANA } ebcdic-sv cpibm278 278 # EBCDIC Sweden
ibm-280_P100-1995 { UTR22* }    ibm-280 { IBM* } IBM280 { IANA* JAVA } CP280 { IANA JAVA* } ebcdic-cp-it { IANA } csIBM280 { IANA } cpibm280 280 # EBCDIC Italy
ibm-284_P100-1995 { UTR22* }    ibm-284 { IBM* } IBM284 { IANA* JAVA } CP284 { IANA JAVA* } ebcdic-cp-es { IANA } csIBM284 { IANA } cpibm284 284 # EBCDIC Spain
ibm-285_P100-1995 { UTR22* }    ibm-285 { IBM* } IBM285 { IANA* JAVA } CP285 { IANA JAVA* } ebcdic-cp-gb { IANA } csIBM285 { IANA } ebcdic-gb cpibm285 285 # EBCDIC UK Ireland
ibm-290_P100-1995 { UTR22* }    ibm-290 { IBM* } IBM290 { IANA* } cp290 { IANA } EBCDIC-JP-kana { IANA } csIBM290 { IANA } # host SBCS (Katakana)
ibm-297_P100-1995 { UTR22* }    ibm-297 { IBM* } IBM297 { IANA* JAVA } cp297 { IANA JAVA* } ebcdic-cp-fr { IANA } csIBM297 { IANA } cpibm297 297 # EBCDIC France
ibm-420_X120-1999 { UTR22* }    ibm-420 { IBM* } IBM420 { IANA* JAVA } cp420 { IANA JAVA* } ebcdic-cp-ar1 { IANA } csIBM420 { IANA } 420        # EBCDIC Arabic (all presentation shapes)
ibm-424_P100-1995 { UTR22* }    ibm-424 { IBM* } IBM424 { IANA* JAVA } cp424 { IANA JAVA* } ebcdic-cp-he { IANA } csIBM424 { IANA } 424         # EBCDIC Hebrew
ibm-500_P100-1995 { UTR22* }    ibm-500 { IBM* } IBM500 { IANA* JAVA } CP500 { IANA JAVA* } ebcdic-cp-be { IANA } csIBM500 { IANA } ebcdic-cp-ch { IANA } cpibm500 500 # EBCDIC International Latin1
ibm-803_P100-1999 { UTR22* }    ibm-803 { IBM* } cp803   # Old EBCDIC Hebrew
ibm-838_P100-1995 { UTR22* }    ibm-838 { IBM* JAVA } IBM-Thai { IANA* } csIBMThai { IANA } cp838 { JAVA* } 838 { JAVA } ibm-9030 { IBM }   # EBCDIC Thai. Yes ibm-9030 is an alias.
ibm-870_P100-1995 { UTR22* }    ibm-870 { IBM* } IBM870 { IANA* JAVA } CP870 { IANA JAVA* } ebcdic-cp-roece { IANA } ebcdic-cp-yu { IANA } csIBM870 { IANA }    # EBCDIC Latin 2 
ibm-871_P100-1995 { UTR22* }    ibm-871 { IBM* } IBM871 { IANA* } ebcdic-cp-is { IANA } csIBM871 { IANA } CP871 { IANA } ebcdic-is cpibm871 871 # EBCDIC Iceland
ibm-875_P100-1995 { UTR22* }    ibm-875 { IBM* } IBM875 { JAVA } cp875 { JAVA* } 875 # EBCDIC Greek
ibm-918_P100-1995 { UTR22* }    ibm-918 { IBM* } IBM918 { IANA* JAVA } CP918 { IANA JAVA* } ebcdic-cp-ar2 { IANA } csIBM918 { IANA } # EBCDIC Urdu
ibm-930_P120-1999 { UTR22* }    # EBCDIC_STATEFUL Katakana-Kanji Host Mixed.
                        ibm-930 { IBM* JAVA }
                        ibm-5026 { IBM } # Yes this is correct
                        cp930 { JAVA* }
                        cpibm930
                        930 { JAVA }
ibm-933_P110-1995 { UTR22* }    ibm-933 { IBM* JAVA } cp933 { JAVA* } cpibm933 933 { JAVA } # Korea EBCDIC MIXED
ibm-935_P110-1999 { UTR22* }    ibm-935 { IBM* JAVA } cp935 { JAVA* } cpibm935 935 { JAVA } # China EBCDIC MIXED. Need to use Unicode, ibm-1388 or gb18030 instead because it is required by the government of China.
ibm-937_P110-1999 { UTR22* }    ibm-937 { IBM* JAVA } cp937 { JAVA* } cpibm937 937 { JAVA } # Taiwan EBCDIC MIXED
ibm-939_P120-1999 { UTR22* }    # EBCDIC_STATEFUL Latin-Kanji Host Mixed.
                        ibm-939 { IBM* JAVA }
                        ibm-931 { IBM }     # Yes this is correct
                        ibm-5035 { IBM }    # Yes this is also correct
                        cp939 { JAVA* }
                        939 { JAVA }
ibm-1025_P100-1995 { UTR22* }   ibm-1025 { IBM* JAVA } cp1025 { JAVA* } 1025 { JAVA }       # EBCDIC Cyrillic
ibm-1026_P100-1995 { UTR22* }   ibm-1026 { IBM* JAVA } IBM1026 { IANA* } CP1026 { IANA JAVA* } csIBM1026 { IANA } 1026 { JAVA } # EBCDIC Turkey 
ibm-1047_P100-1995 { UTR22* }   ibm-1047 { IBM* } IBM1047 { IANA* } cpibm1047                       # EBCDIC Open systems Latin1
ibm-1097_P100-1995 { UTR22* }   ibm-1097 { IBM* JAVA } cp1097 { JAVA* } 1097 { JAVA }               # EBCDIC Farsi
ibm-1112_P100-1995 { UTR22* }   ibm-1112 { IBM* JAVA } cp1112 { JAVA* } 1112 { JAVA }               # EBCDIC Baltic
ibm-1122_P100-1999 { UTR22* }   ibm-1122 { IBM* JAVA } cp1122 { JAVA* } 1122 { JAVA }               # EBCDIC Estonia 
ibm-1123_P100-1995 { UTR22* }   ibm-1123 { IBM* JAVA } cp1123 { JAVA* } 1123 { JAVA } cpibm1123     # EBCDIC Cyrillic Ukraine
ibm-1130_P100-1997 { UTR22* }   ibm-1130 { IBM* }       # EBCDIC Vietnamese
ibm-1132_P100-1998 { UTR22* }   ibm-1132 { IBM* }       # EBCDIC Lao

# with Euro
ibm-1140_P100-1997 { UTR22* }   ibm-1140 { IBM* JAVA } IBM01140 { IANA* } CCSID01140 { IANA } CP01140 { IANA } cp1140 { JAVA* } cpibm1140 ebcdic-us-37+euro { IANA } # EBCDIC US
ibm-1141_P100-1997 { UTR22* }   ibm-1141 { IBM* JAVA } IBM01141 { IANA* } CCSID01141 { IANA } CP01141 { IANA } cp1141 { JAVA* } cpibm1141 ebcdic-de-273+euro { IANA } # EBCDIC Germanay, Austria
ibm-1142_P100-1997 { UTR22* }   ibm-1142 { IBM* JAVA } IBM01142 { IANA* } CCSID01142 { IANA } CP01142 { IANA } cp1142 { JAVA* } cpibm1142 ebcdic-dk-277+euro { IANA } ebcdic-no-277+euro { IANA } # EBCDIC Denmark
ibm-1143_P100-1997 { UTR22* }   ibm-1143 { IBM* JAVA } IBM01143 { IANA* } CCSID01143 { IANA } CP01143 { IANA } cp1143 { JAVA* } cpibm1143 ebcdic-fi-278+euro { IANA } ebcdic-se-278+euro { IANA } # EBCDIC Sweden
ibm-1144_P100-1997 { UTR22* }   ibm-1144 { IBM* JAVA } IBM01144 { IANA* } CCSID01144 { IANA } CP01144 { IANA } cp1144 { JAVA* } cpibm1144 ebcdic-it-280+euro { IANA } # EBCDIC Italy
ibm-1145_P100-1997 { UTR22* }   ibm-1145 { IBM* JAVA } IBM01145 { IANA* } CCSID01145 { IANA } CP01145 { IANA } cp1145 { JAVA* } cpibm1145 ebcdic-es-284+euro { IANA } # EBCDIC Spain
ibm-1146_P100-1997 { UTR22* }   ibm-1146 { IBM* JAVA } IBM01146 { IANA* } CCSID01146 { IANA } CP01146 { IANA } cp1146 { JAVA* } cpibm1146 ebcdic-gb-285+euro { IANA } # EBCDIC UK Ireland
ibm-1147_P100-1997 { UTR22* }   ibm-1147 { IBM* JAVA } IBM01147 { IANA* } CCSID01147 { IANA } CP01147 { IANA } cp1147 { JAVA* } cpibm1147 ebcdic-fr-297+euro { IANA } # EBCDIC France
ibm-1148_P100-1997 { UTR22* }   ibm-1148 { IBM* JAVA } IBM01148 { IANA* } CCSID01148 { IANA } CP01148 { IANA } cp1148 { JAVA* } cpibm1148 ebcdic-international-500+euro { IANA } # EBCDIC International Latin1
ibm-1149_P100-1997 { UTR22* }   ibm-1149 { IBM* JAVA } IBM01149 { IANA* } CCSID01149 { IANA } CP01149 { IANA } cp1149 { JAVA* } cpibm1149 ebcdic-is-871+euro { IANA } # EBCDIC Iceland
ibm-1153_P100-1999 { UTR22* }   ibm-1153 { IBM* } cpibm1153             # EBCDIC latin 2
ibm-1154_P100-1999 { UTR22* }   ibm-1154 { IBM* } cpibm1154             # EBCDIC Cyrillic Multilingual
ibm-1155_P100-1999 { UTR22* }   ibm-1155 { IBM* } cpibm1155             # EBCDIC Turkey
ibm-1156_P100-1999 { UTR22* }   ibm-1156 { IBM* } cpibm1156             # EBCDIC Baltic Multilingual
ibm-1157_P100-1999 { UTR22* }   ibm-1157 { IBM* } cpibm1157             # EBCDIC Estonia
ibm-1158_P100-1999 { UTR22* }   ibm-1158 { IBM* } cpibm1158             # EBCDIC Cyrillic Ukraine
ibm-1160_P100-1999 { UTR22* }   ibm-1160 { IBM* } cpibm1160             # EBCDIC Thailand
ibm-1164_P100-1999 { UTR22* }   ibm-1164 { IBM* } cpibm1164             # EBCDIC Viet Nam
ibm-1364_P110-1997 { UTR22* }   ibm-1364 { IBM* } cp1364                # Korean Host Mixed
ibm-1371_P100-1999 { UTR22* }   ibm-1371 { IBM* } cpibm1371             # Taiwan EBCDIC MIXED
ibm-1388_P103-2001 { UTR22* }   ibm-1388 { IBM* } ibm-9580 { IBM }      # S-Ch DBCS-Host Data GBK EBCDIC_STATEFUL. Yes ibm-9580 is an alias.
ibm-1390_P110-2003 { UTR22* }   ibm-1390 { IBM* } cpibm1390             # Japan EBCDIC MIXED (JIS X 0213)
ibm-1399_P110-2003 { UTR22* }   ibm-1399 { IBM* }                       # Host MBCS (Latin-Kanji) (JIS X 0213)
ibm-16684_P110-2003 { UTR22* }  ibm-16684 { IBM* }                      # DBCS Jis + Roman Jis Host. This is the DBCS portion of ibm-1390 and ibm-1399 (JIS X 0213)
ibm-4899_P100-1998 { UTR22* }   ibm-4899 { IBM* } cpibm4899             # Old EBCDIC Hebrew
ibm-4971_P100-1999 { UTR22* }   ibm-4971 { IBM* } cpibm4971             # EBCDIC Greek
ibm-12712_P100-1998 { UTR22* }  ibm-12712 { IBM* } cpibm12712 ebcdic-he # EBCDIC Hebrew (new sheqel, control charaters update)
ibm-16804_X110-1999 { UTR22* }  ibm-16804 { IBM* } cpibm16804 ebcdic-ar # EBCDIC Arabic


# TODO: Consider removing the mappings in this section
ibm-1137_P100-1999 { UTR22* }   ibm-1137 { IBM* }   # Devanagari EBCDIC (based on Unicode character set)
ibm-5123_P100-1999 { UTR22* }   ibm-5123 { IBM* }   # Host Roman Jis. Euro update of ibm-1027
ibm-8482_P100-1999 { UTR22* }   ibm-8482 { IBM* }   # host SBCS (Katakana). Euro update of ibm-290


# EBCDIC codepages for S/390, with LF and NL codes swapped
# Starting with ICU 2.4, the swapping is done by modifying the
# normal tables at runtime instead of at build time.
# Append UCNV_SWAP_LFNL_OPTION_STRING to the "ibm-CCSID" name to select this.
#
# Example: "ibm-1047,swaplfnl" or "ibm-1047" UCNV_SWAP_LFNL_OPTION_STRING
#
# This avoids the duplication of all EBCDIC SBCS and mixed-SBCS/DBCS
# mapping files.

# Some examples below for declaring old-style, obsolete aliases with the "-s390"
# suffix to map to the new-style, recommended names with the option added.
# These are listed here for backward compatibility.
# Do not use these; instead use the normal converter name with the option
# added as recommended above.

# Note: It is not possible to define an alias (non-initial name in a line here)
# that itself contains a converter option like this one for swapping LF<->NL.
# Such names would never be found because ucnv_open() will first parse and strip
# options before looking up a name in this table.
# ucnv_open() then parses the lookup result (the canonical name on the left
# in lines here) as well.

# This also means that it is not necessary to add anything to convrtrs.txt
# for converter names like "ibm-1026,swaplfnl" to work -
# they are already covered by the normal option parsing together with the
# regular, option-less alias elsewhere in this file.

ibm-37_P100-1995,swaplfnl     ibm-37-s390 ibm037-s390
ibm-1047_P100-1995,swaplfnl   ibm-1047-s390
ibm-1140_P100-1997,swaplfnl   ibm-1140-s390
ibm-1142_P100-1997,swaplfnl   ibm-1142-s390
ibm-1143_P100-1997,swaplfnl   ibm-1143-s390
ibm-1144_P100-1997,swaplfnl   ibm-1144-s390
ibm-1145_P100-1997,swaplfnl   ibm-1145-s390
ibm-1146_P100-1997,swaplfnl   ibm-1146-s390
ibm-1147_P100-1997,swaplfnl   ibm-1147-s390
ibm-1148_P100-1997,swaplfnl   ibm-1148-s390
ibm-1149_P100-1997,swaplfnl   ibm-1149-s390
ibm-1153_P100-1999,swaplfnl   ibm-1153-s390
ibm-12712_P100-1998,swaplfnl  ibm-12712-s390
ibm-16804_X110-1999,swaplfnl  ibm-16804-s390

# This is a special version of ibm-1140 that the XML4C (Xerces) parser team
# requested in 2000.
# It maps both EBCDIC LF and NL controls to Unicode LF U+000A.

ebcdic-xml-us



# These were removed due to age, and they are rarely used.

# ibm-274   IBM274 { IANA* } cp274 csIBM274 ebcdic-be
# ibm-870   IBM870 { IANA* } ebcdic-cp-roece ebcdic-cp-yu csIBM870 cp870 870

#ibm-942_P120-1999 { UTR22* }
#                        #ibm-942 { IBM* }
#                        ibm-942_VASCII_VSUB_VPUA
#                        #ibm-932 { IBM }
#                        ibm-932_VASCII_VSUB_VPUA   # Old s_jis
#ibm-859 { IBM* }        cp859 { MIME* }     # PC Latin 9 (w/ euro update)
#ibm-5104_X110-1999 { UTR22* }   ibm-5104 { IBM* } cp1008    # 8-bit Arabic (w/ euro update)
#ibm-9238 { IBM* }               cp1046                      # PC Arabic Extended (w/ euro update)
#ibm-17248_X110-1999 { UTR22* }  ibm-17248 { IBM* }          # PC Arabic (w/ euro update) Updated version of ibm-864

#ibm-941                 jis-208 jisx-208    # Pure DBCS jisx-208 # ibm-941 is not JISX 208 code page
#ibm-955                 jis-208 jisx-208    # Pure DBCS jisx-208

#ibm-1159_P100-1999 { UTR22* }   ibm-1159 { IBM* }   # SBCS T-Ch Host. Euro update of ibm-28709. This is used in combination with another CCSID mapping.
#ibm-9027_P100-1999 { UTR22* }   ibm-9027 { IBM* }   # DBCS T-Ch Host. Euro update of ibm-835. DBCS portion of ibm-1371.


