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

# IMPORTANT NOTE
#
# This file is not read directly by ICU. If you change it, you need to
# run gencnval, and eventually pkgdata to update the representation that
# ICU uses for aliases.

# This is an alias file used by the character set converter.
#
# Format:
#
#     Actual file name || Algorithm name     alias1 alias2 ...
#
# except for column 1 (file names) case insensitive. Names are separated
# by whitespace.
#
# All names can be tagged by including a comma-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().
#
# Here is a list of tags used in this file:
#
# IANA		The IANA charset name, as documented in	RFC 1700.
# MIME		The MIME charset name, used for	content type tagging. 

# The world is getting more complicated...
# Supporting XML parsers, HTML, MIME, and similar applications
# that mark encodings with unique charset names, we are forced to
# make this table much more static than before.

# It means that a new encoding, 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 encoding 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).

# Especially, 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.isi.edu/in-notes/iana/assignments/character-sets

# Name matching is case-insensitive. Also, dashes '-', underscores '_'
# and spaces ' ' are ignored in names (thus cs-iso-latin-1 and csisolatin1
# 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.

# Algorithmic
UTF8			 utf-8 { MIME } ibm-1208 cp1208
UTF16_BigEndian		 utf-16be { MIME }
UTF16_LittleEndian	 utf-16le { MIME }
UTF16_PlatformEndian	 ISO-10646-UCS-2 { IANA } csUnicode utf-16 { MIME } ibm-1200 cp1200 ucs-2
UTF16_OppositeEndian
UTF32_BigEndian		 utf-32be { MIME }
UTF32_LittleEndian	 utf-32le { MIME }
UTF32_PlatformEndian	 ISO-10646-UCS-4 { IANA	} csUCS4 utf-32 { MIME } ucs-4
UTF32_OppositeEndian
LATIN_1			 iso-8859-1	{ MIME } ibm-819 cp819 latin1 8859-1 csisolatin1 iso-ir-100 cp367 ISO_8859-1:1987 { IANA } l1 ANSI_X3.110-1983   #!!!!! There's whole lot of names for this
ISO_2022			 ISO-2022 { MIME } 2022 cp2022
ISO_2022,locale=ja,version=0	 ISO-2022-JP { IANA MIME } csISO2022JP
ISO_2022,locale=ja,version=1	 ISO-2022-JP-1
ISO_2022,locale=ja,version=2	 ISO-2022-JP-2 { IANA MIME } csISO2022JP2
ISO_2022,locale=ko		 ISO-2022-KR { IANA MIME } csISO2022KR
ISO_2022,locale=zh,version=0	 ISO-2022-CN { MIME } csISO2022CN
ISO_2022,locale=zh,version=1	 ISO-2022-CN-EXT
HZ				 hz HZ-GB-2312 { MIME }
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

# Table-based

ibm-367			us-ascii { MIME	} ascii ascii-7 US-ASCII ANSI_X3.4-1968 { IANA } ANSI_X3.4-1986 ISO_646.irv:1991 iso646-us us csASCII 646

# Special mapping for S/390 new line characters
ebcdic-xml-us

# Interchange codepages
ibm-912			iso-8859-2 { MIME } cp912 latin2 8859-2	csisolatin2	iso-ir-101 ISO_8859-2:1987 { IANA } l2 # Central Europe
ibm-913			iso-8859-3 { MIME } latin3 cp913 8859-3	csisolatin3	iso-ir-109 ISO_8859-3:1988 { IANA } l3 # Maltese Esperanto
ibm-914			iso-8859-4 { MIME } latin4 cp914 8859-4	csisolatin4	iso-ir-110 ISO_8859-4:1988 { IANA } l4 # Baltic
ibm-915			iso-8859-5 { MIME } cyrillic cp915 8859-5 csisolatincyrillic iso-ir-144	ISO_8859-5:1988 { IANA } # Cyrillic
ibm-1089		iso-8859-6 { MIME } arabic cp1089 8859-6 csisolatinarabic iso-ir-127 ISO_8859-6:1987 { IANA } ecma-114 asmo-708	  # Arabic
ibm-4909		cp813 iso-8859-7 { MIME	} greek greek8 elot_928 ecma-118 8859-7 csisolatingreek iso-ir-126 ISO_8859-7:1987 { IANA } # ISO Greek (w/ euro update)
ibm-813			# Same as 4909 (w/o euro update)
ibm-916			iso-8859-8 { MIME } hebrew cp916 8859-8	csisolatinhebrew iso-ir-138 ISO_8859-8:1988 { IANA }   # hebrew iso-8859-8i - typo?
ibm-920			iso-8859-9 { MIME } ECMA-128 latin5	cp920 8859-9 csisolatin5 iso-ir-148 ISO_8859-9:1989 { IANA } l5 # Turkish
ibm-923			iso-8859-15	{ MIME } latin9 cp923 8859-15 latin0 csisolatin0 csisolatin9       # Latin 9
ibm-1252		ibm-1004 cp1004	     # Windows Latin 1 without Euro
ibm-943			Shift_JIS { MIME } csWindows31J     sjis cp943 cp932 ms_kanji csshiftjis windows-31j  x-sjis  # japanese. Unicode name is \u30b7\u30d5\u30c8\u7b26\u53f7\u5316\u8868\u73fe Iana says that Windows-31J is an extension to csshiftjis ibm-932 removed
ibm-949			KS_C_5601-1987 { IANA }	iso-ir-149 KS_C_5601-1989 csKSC56011987 KSC_5601 { MIME } johab ks_x_1001:1992	     # KSC-5601-1992, korean
ibm-1370		Big5 { MIME	} csBig5 x-big5 cp950 # Taiwan Big-5 (w/ euro update)
ibm-950			# Taiwan Big-5 (w/o euro update)
ibm-1386		GB_2312-80 { IANA } iso-ir-58 csISO58GB231280 gbk chinese gb  GB2312 { MIME } gb2312-1980 cp936 zh_cn # Chinese GBK removed
ibm-33722		EUC-JP { MIME }	ibm-eucJP eucjis extended_unix_code_packed_format_for_japanese cseuckdfmtjapanese X-EUC-JP  # Japan EUC
ibm-970			EUC-KR { IANA MIME } ibm-eucKR csEUCKR			     # Korean EUC
ibm-964			EUC-TW { MIME }	ibm-eucTW cns11643		# Taiwan EUC
ibm-1383		EUC-CN { MIME }	ibm-eucCN			# China	EUC
ibm-1162		tis-620	cp874 windows-874 { MIME } ms874 cp9066 # Thai (w/ euro update)
ibm-874			ibm-1161 # Same	as 1162 (w/o euro update)

lmb-excp		# Special exceptions list for LMBCS	algorithm

# Platform codepages
ibm-437			cp437 csPC8CodePage437 437	   # PC	US
# HSYS:
ibm-850			IBM850 { IANA }	cp850 { MIME } 850 csPC850Multilingual	  # PC latin1
ibm-851			IBM851 { IANA }	cp851 { MIME } 851 csPC851	     # PC DOS Greek (w/o euro)
ibm-858			cp858  { MIME }	# PC latin1	with Euro cp850 removed
ibm-9044		852 csPCp852 cp852 { MIME } # PC latin2	(w/ euro update)
ibm-852			IBM852 { IANA }	# PC latin2	(w/o euro update)
ibm-872			855 csIBM855 cp855 { MIME } # PC cyrillic (w/ euro update)
ibm-855			IBM855 { IANA }	# PC cyrillic (w/o euro	update)
ibm-856			cp856 {	MIME }		 # PC Hebrew (old)
ibm-9049		857 csIBM857 cp857 { MIME } # PC Latin 5 (Turkish) (w/ euro	update)
ibm-857			IBM857 { IANA }	# PC Latin 5 (w/o euro update)
ibm-859			cp859 {	MIME }		 # PC Latin	9 (w/ euro update)
ibm-860			IBM860 { IANA }	cp860 { MIME } 860 csIBM860	       # PC	Portugal
ibm-861			IBM861 { IANA }	cp861 { MIME } 861 cp-is csIBM861	    # PC Iceland
ibm-867			cp867  862 cp862 { MIME	} cspc862latinhebrew # PC Hebrew (w/ euro update)
ibm-862			IBM862 { IANA }	# PC Hebrew	(w/o euro update)
ibm-863			IBM863 { IANA }	cp863 { MIME } 863 csIBM863	      #	PC Canadian	French
ibm-17248		cp864 {	MIME } csIBM864 # PC Arabic (w/ euro update)
ibm-864			IBM864 { IANA }	# PC Arabic	(w/o euro update)
ibm-865			IBM865 { IANA }	cp865 { MIME } 865 csIBM865	       # PC	Nordic
ibm-808			cp866 {	MIME } 866 csIBM866 # PC Russian (w/ euro update)
ibm-866			# PC Russian (w/o euro update)
ibm-868			IBM868 { IANA }	cp868 { MIME } cp-ar csIBM868		 # PC Urdu
ibm-9061		cp869 {	MIME } 869 cp-gr csIBM869 # PC Greek (w/ euro update)
ibm-869			IBM869 { IANA }	# PC Greek (w/o euro update)
ibm-878			KOI8-R { IANA MIME } cp878 koi8	cskoi8r	 # Russian internet
ibm-901			cp921 {	MIME } # PC	Baltic (w/ euro update)
ibm-921			# PC Baltic	(w/o euro update)
ibm-902			cp922 {	MIME } # PC	Estonian (w/ euro update)
ibm-922			# PC Estonian (w/o euro	update)
ibm-942			shift_jis78	sjis78 ibm-932   # Old s_jis ibm-932 added!
#ibm-941		 jis-208 jisx-208 # Pure DBCS jisx-208#	ibm-941 is not JISX 208	code page
#ibm-1038		Adobe-Symbol-Encoding csHPPSMath symbol
ibm-5346		windows-1250 { IANA MIME } cp1250	# Windows Latin2 (w/ euro update)
ibm-5347		windows-1251 { IANA MIME } cp1251	# Windows Cyrillic (w/ euro update)
ibm-5348		windows-1252 { IANA MIME } cp1252	# Windows Latin1 (w/ euro update)
ibm-5349		windows-1253 { IANA MIME } cp1253	# Windows Greek	(w/ euro update)
ibm-5350		windows-1254 { IANA MIME } cp1254	# Windows Turkish (w/ euro update)
ibm-5351		windows-1255 { IANA MIME } cp1255	# Windows Hebrew (w/ euro update)
ibm-5352		windows-1256 { IANA MIME } cp1256	# Windows Arabic (w/ euro update)
ibm-5353		windows-1257 { IANA MIME } cp1257	# Windows Baltic (w/ euro update)
ibm-5354		windows-1258 { IANA MIME } cp1258	# Windows Vietnamese (w/ euro update)
ibm-1250		# Windows Latin2 (w/o euro update)
ibm-1251		# Windows Cyrillic (w/o	euro update)
ibm-1253		# Windows Greek	(w/o euro update)
ibm-1254		# Windows Turkish (w/o euro update)
ibm-1255		# Windows Hebrew (w/o euro update)
ibm-1256		# Windows Arabic (w/o euro update)
ibm-1257		# Windows Baltic (w/o euro update)
ibm-1258		# Windows Vietnamese (w/o euro update)

ibm-1275		macintosh {	IANA } mac { MIME }     csMacintosh	     # Apple latin 1
ibm-1276		Adobe-Standard-Encoding	csAdobeStandardEncoding
ibm-1277		Adobe-Latin1-Encoding
ibm-1280		macgr			# Apple	Greek
ibm-1281		mactr			# Apple	Turkish
ibm-1282		macce			# Apple	Central Europe
ibm-1283		maccy			# Apple	Cyrillic

ibm-1051		hp-roman8 roman8 r8 csHPRoman8	# HP Latin1

ibm-1388		#S-Ch DBCS-Host	Data GBK mixed MBCS

# Added for more euro support

ibm-849		       cp1131	       # PC	Belarus (w/ euro update)
ibm-848		       cp1125	       # PC	Ukraine (w/ euro update)
ibm-5104	       cp1008	       # 8-bit Arabic (w/ euro update)
ibm-9238	       cp1046	       # PC	Arabic Extended (w/     euro update)
ibm-1362	       cp1362	       # Korean	Windows DBCS (w/ euro update)
ibm-1363	       cp1363 cp949 ksc	korean # Korean KSC Korean Windows MBCS (w/ euro update)
ibm-5210	       cp1114	       # PC	SBCS Big-5 (w/ euro     update)
ibm-21427	       cp947	       # PC	DBCS Big-5 (w/ euro     update)

# EBCDIC codepages according to the CDRA

# without Euro
ibm-37		       IBM037 {	IANA } ibm-037 cpibm37 ebcdic-cp-us	ebcdic-cp-ca ebcdic-cp-wt ebcdic-cp-nl csIBM037 cp37 ebcdic-cp-us cp037 # EBCDIC US
ibm-273		       IBM273 {	IANA } csIBM273 ebcdic-de cp273 cpibm273 # EBCDIC Germanay,	Austria...
ibm-277		       IBM277 {	IANA } EBCDIC-CP-DK EBCDIC-CP-NO csIBM277 ebcdic-dk  cp277 cpibm277 # EBCDIC Denmark...
ibm-278		       IBM278 {	IANA } ebcdic-cp-fi ebcdic-cp-se csIBM278 ebcdic-sv  cp278 cpibm278 # EBCDIC Sweden
ibm-280		       IBM280 {	IANA } ebcdic-cp-it csIBM280 cp280 cpibm280 # EBCDIC Italy
ibm-284		       IBM284 {	IANA } ebcdic-cp-es csIBM284 cp284 cpibm284 # EBCDIC Spain
ibm-285		       IBM285 {	IANA } ebcdic-cp-gb csIBM285 ebcdic-gb cp285 cpibm285 # EBCDIC UK Ireland
ibm-290		       IBM290 {	IANA } EBCDIC-JP-kana csIBM290 cp290 # host SBCS (Katakana)
ibm-297		       IBM297 {	IANA } ebcdic-cp-fr csIBM297 cp297 cpibm297 # EBCDIC France
ibm-420		       IBM420 {	IANA } ebcdic-cp-ar1 csIBM420 cp420
ibm-424		       IBM424 {	IANA } ebcdic-cp-he csIBM424 cp424
ibm-500		       IBM500 {	IANA } cpibm500 csIBM500 cp500 ebcdic-cp-be ebcdic-cp-ch # EBCDIC International Latin1
ibm-803		       cp803 # Old EBCDIC Hebrew
ibm-834		       cp834 # Korean DBCS Host
ibm-835		       cp835 # DBCS T-Ch Host
ibm-871		       IBM871 {	IANA } ebcdic-cp-is csIBM871 cpibm871 cp871 # EBCDIC Iceland
ibm-930		       cp930 cpibm930	# Japan	EBCDIC MIXED
ibm-933		       cp933 cpibm933		# Korea	EBCDIC MIXED 
ibm-935		       cp935 cpibm935		# China	EBCDIC MIXED 
ibm-937		       cp937 cpibm937 #	Taiwan EBCDIC MIXED
ibm-939		       cp939 # Host MBCS (Latin-Kanji)
#ibm-1046	       # PC	Arabic without EURO
# with Euro
ibm-1390	       cpibm1390 # Japan EBCDIC	MIXED
ibm-1371	       cpibm1371 # Taiwan EBCDIC MIXED
ibm-1047	       cpibm1047 # EBCDIC Open systems Latin1
ibm-1123	       cpibm1123 # Cyrillic Ukraine	EBCDIC
ibm-1140	       cpibm1140 # EBCDIC US...
ibm-1141	       cpibm1141 # EBCDIC Germanay,	Austria...
ibm-1142	       cpibm1142 # EBCDIC Denmark...
ibm-1143	       cpibm1143 # EBCDIC Sweden
ibm-1144	       cpibm1144 # EBCDIC Italy
ibm-1145	       cpibm1145 # EBCDIC Spain
ibm-1146	       cpibm1146 # EBCDIC UK Ireland
ibm-1147	       cpibm1147 # EBCDIC France
ibm-1148	       cpibm1148 # EBCDIC International	Latin1
ibm-1149	       cpibm1149 ebcdic-is # EBCDIC	Iceland
ibm-1153	       cpibm1153 # EBCDIC latin 2
ibm-1154	       cp1025 cpibm1154				# EBCDIC Cyrillic Multilingual
ibm-1155	       IBM1026 { IANA }	csIBM1026 cp1026 cpibm1155	 # EBCDIC Turkey
ibm-1156	       cp1112 cpibm1156				# EBCDIC Baltic	Multilingual
ibm-1157	       cp1122 cpibm1157				# EBCDIC Estonia
ibm-1158	       cp1123 cpibm1158				# Cyrillic Ukraine EBCDIC
ibm-1159	       cp28709	       # SBCS T-Ch Host
ibm-1160	       cp9030 cpibm1160				# EBCDIC Thailand
ibm-1164	       cp1130 cpibm1164				# EBCDIC Viet Nam

ibm-1399	       # Host MBCS (Latin-Kanji)
ibm-4930	       cp4930 #	Korean DBCS	Host
ibm-1364	       cp1364 #	Korean Host	Mixed
ibm-8482	       # host SBCS (Katakana)
ibm-4899	       cpibm4899			  # Old	EBCDIC Hebrew
ibm-4971	       cp875 cpibm4971				# EBCDIC Greek
ibm-9027	       # DBCS T-Ch Host
ibm-5123	       cp1027	       # Host Roman Jis
ibm-12712	       cpibm12712 ebcdic-he # EBCDIC Hebrew (new sheqel, control charaters update)
ibm-16684	       cp300	       # Jis + Roman Jis Host
ibm-16804	       cpibm16804 ebcdic-ar # EBCDIC Arabic

# unsupported IANA names
# ebcdic-it csEBCDICIT
# ebcdic-es csEBCDICES
# csEBCDICFR ebcdic-fr
# ibm-274		 IBM274	{ IANA } cp274 csIBM274	ebcdic-be
# ibm-870 IBM870 { IANA } ebcdic-cp-roece ebcdic-cp-yu csIBM870 cp870

# EBCDIC codepages for S/390, with LF and NL codes swapped

# without Euro
ibm-37-s390	       ibm037-s390   # EBCDIC US
ibm-1047-s390	       # EBCDIC	for S/390 Open Edition
		   
# with Euro	   
ibm-1140-s390	       # EBCDIC	US
ibm-1142-s390	       # EBCDIC	Denmark
ibm-1143-s390	       # EBCDIC	Sweden
ibm-1144-s390	       # EBCDIC	Italy
ibm-1145-s390	       # EBCDIC	Spain
ibm-1146-s390	       # EBCDIC	UK Ireland
ibm-1147-s390	       # EBCDIC	France
ibm-1148-s390	       # EBCDIC	International Latin1
ibm-1149-s390	       # EBCDIC	Iceland
ibm-1153-s390	       # EBCDIC	latin 2
ibm-12712-s390	       # EBCDIC	Hebrew
ibm-16804-s390	       # EBCDIC	Arabic

# Added for ISO-2022 support
jisx-201			           # Can be used by other converters
jisx-208			           # Can be used by other converters if	pure DBCS conversion is needed
jisx-212		           # Can be used by other converters if	pure DBCS conversion is needed
gb_2312_80-1	           # Can be used by other converters if	pure DBCS conversion is needed
iso-ir-165		           # Can be used by other converters if	pure DBCS conversion is needed
ksc_5601_1		           # Can be used by other converters if	pure DBCS conversion is needed
cns-11643-1992	           # ISO-2022-CN specific.Cannot be used by other converters

# GB 18030 is partly algorithmic, using the MBCS converter
# ### IMPORTANT: THIS IS ALPHA-VERSION DATA AND MAY CHANGE WITHOUT NOTICE
gb18030
