# ISO 3166 2-letter and 3-letter country codes
#
# This file contains a table with the following columns:
# 1.  ISO 3166 2-character country code.
# 2.  ISO 3166 3-character country code.
# 3.  The official German country name.
# Source: http://www.auswaertiges-amt.de/www/de/infoservice/download/pdf/publikationen/staatennamen.pdf
#         version 2002-10-17
#
# Columns are separated by a single tab.
# The table is sorted by 2-letter country code.
#
# Lines beginning with '#' are comments.
#
AD	AND	Andorra
AE	ARE	Vereinigte Arabische Emirate
AF	AFG	Afghanistan
AG	ATG	Antigua und Barbuda
#AI		Anguilla
AL	ALB	Albanien
AM	ARM	Armenien
#AN		Netherlands Antilles
AO	AGO	Angola
#AQ		Antarctica
AR	ARG	Argentinien
#AS		Samoa (American)
AT	AUT	Österreich
AU	AUS	Australien
#AW		Aruba
AZ	AZE	Azerbaidschan
BA	BIH	Bosnien und Herzegowina
BB	BRB	Barbados
BD	BGD	Bangladesch
BE	BEL	Belgien
BF	BFA	Burkina Faso
BG	BGR	Bulgarien
BH	BHR	Bahrain
BI	BDI	Burundi
BJ	BEN	Benin
#BM		Bermuda
BN	BRN	Brunei Darussalam
BO	BOL	Bolivien
BR	BRA	Brasilien
BS	BHS	Bahamas
BT	BTN	Bhutan
#BV		Bouvet Island
BW	BWA	Botsuana
BY	BLR	Belarus
BZ	BLZ	Belize
CA	CAN	Kanada
#CC		Cocos (Keeling) Islands
CD	COD	Kongo, Demokratische Republik
CF	CAF	Zentralafrikanische Republik
CG	COG	Kongo
CH	CHE	Schweiz
CI	CIV	Côte d'Ivoire
CK	COK	Cookinseln
CL	CHL	Chile
CM	CMR	Kamerun
CN	CHN	China
CO	COL	Kolumbien
CR	CRI	Costa Rica
CU	CUB	Kuba
CV	CPV	Kap Verde
#CX		Christmas Island
CY	CYP	Zypern
CZ	CZE	Tscheschische Republik
DE	DEU	Deutschland
DJ	DJI	Dschibuti
DK	DNK	Dänemark
DM	DMA	Dominica
DO	DOM	Dominikanische Republik
DZ	DZA	Algerien
EC	ECU	Ecuador
EE	EST	Estland
EG	EGY	Ägypten
#EH		Western Sahara
ER	ERI	Eritrea
ES	ESP	Spanien
ET	ETH	Äthiopien
FI	FIN	Finnland
FJ	FJI	Fidschi
#FK		Falkland Islands
FM	FSM	Mikronesien, Föderierte Staaten von
#FO		Faeroe Islands
FR	FRA	Frankreich
GA	GAB	Gabun
GB	GBR	Vereinigtes Königreich
GD	GRD	Grenada
GE	GEO	Georgien
#GF		French Guiana
GH	GHA	Ghana
#GI		Gibraltar
#GL		Greenland
GM	GMB	Gambia
GN	GIN	Guinea
#GP		Guadeloupe
GQ	GNQ	Äquatorialguinea
GR	GRC	Griechenland
#GS		South Georgia & the South Sandwich Islands
GT	GTM	Guatemala
#GU		Guam
GW	GNB	Guinea-Bissau
GY	GUY	Guyana
#HK		Hong Kong
#HM		Heard Island & McDonald Islands
HN	HND	Honduras
HR	HRV	Kroatien
HT	HTI	Haiti
HU	HUN	Ungarn
ID	IDN	Indonesien
IE	IRL	Irland
IL	ISR	Israel
IN	IND	Indien
#IO		British Indian Ocean Territory
IQ	IRQ	Irak
IR	IRN	Iran, Islamische Republik
IS	ISL	Island
IT	ITA	Italien
JM	JAM	Jamaika
JO	JOR	Jordanien
JP	JPN	Japan
KE	KEN	Kenia
KG	KGZ	Kirgisistan
KH	KHM	Kambodscha
KI	KIR	Kiribati
KM	COM	Komoren
KN	KNA	St. Kitts und Nevis
KP	PRK	Korea, Demokratische Volksrepublik
KR	KOR	Korea, Republik
KW	KWT	Kuwait
#KY		Cayman Islands
KZ	KAZ	Kasachstan
LA	LAO	Laos, Demokratische Volksrepublik
LB	LBN	Libanon
LC	LCA	St. Lucia
LI	LIE	Liechtenstein
LK	LKA	Sri Lanka
LR	LBR	Liberia
LS	LSO	Lesotho
LT	LTU	Litauen
LU	LUX	Luxemburg
LV	LVA	Lettland
LY	LBY	Libysch-Arabische Dschamahirija
MA	MAR	Marokko
MC	MCO	Monaco
MD	MDA	Moldau, Republik
MG	MDG	Madagaskar
MH	MHL	Marshallinseln
MK	MKD	Mazedonien, ehemalige jugoslawische Republik
ML	MLI	Mali
MM	MMR	Myanmar
MN	MNG	Mongolei
#MO		Macao
#MP		Northern Mariana Islands
#MQ		Martinique
MR	MRT	Mauretanien
#MS		Montserrat
MT	MLT	Malta
MU	MUS	Mauritius
MV	MDV	Malediven
MW	MWI	Malawi
MX	MEX	Mexiko
MY	MYS	Malaysia
MZ	MOZ	Mosambik
NA	NAM	Namibia
#NC		New Caledonia
NE	NER	Niger
#NF		Norfolk Island
NG	NGA	Nigeria
NI	NIC	Nicaragua
NL	NLD	Niederlande
NO	NOR	Norwegen
NP	NPL	Nepal
NR	NRU	Nauru
NU	NIU	Niue
NZ	NZL	Neuseeland
OM	OMN	Oman
PA	PAN	Panama
PE	PER	Peru
#PF		French Polynesia
PG	PNG	Papua-Neuguinea
PH	PHL	Philippinen
PK	PAK	Pakistan
PL	POL	Polen
#PM		St Pierre & Miquelon
#PN		Pitcairn
#PR		Puerto Rico
#PS		Palestine
PT	PRT	Portugal
PW	PLW	Palau
PY	PRY	Paraguay
QA	QAT	Katar
#RE		Reunion
RO	ROU	Rumänien
RU	RUS	Russische Föderation
RW	RWA	Ruanda
SA	SAU	Saudi-Arabien
SB	SLB	Salomonen
SC	SYC	Seychellen
SD	SDN	Sudan
SE	SWE	Schweden
SG	SGP	Singapur
#SH		St Helena
SI	SVN	Slowenien
#SJ		Svalbard & Jan Mayen
SK	SVK	Slowakei
SL	SLE	Sierra Leone
SM	SMR	San Marino
SN	SEN	Senegal
SO	SOM	Somalia
SR	SUR	Suriname
ST	STP	São Tomé und Principe
SV	SLV	El Salvador
SY	SYR	Syrien, Arabische Republik
SZ	SWZ	Swasiland
#TC		Turks & Caicos Is
TD	TCD	Tschad
#TF		French Southern & Antarctic Lands
TG	TGO	Togo
TH	THA	Thailand
TJ	TJK	Tadschikistan
#TK		Tokelau
TL	TLS	Timor-Leste
TM	TKM	Turkmenistan
TN	TUN	Tunesien
TO	TON	Tonga
#TP		East Timor
TR	TUR	Türkei
TT	TTO	Trinidad und Tobago
TV	TUV	Tuvalu
#TW		Taiwan
TZ	TZA	Tansania, Vereinigte Republik
UA	UKR	Ukraine
UG	UGA	Uganda
#UM		US minor outlying islands
US	USA	Vereinigte Staaten
UY	URY	Uruguay
UZ	UZB	Usbekistan
VA	VAT	Vatikanstadt
VC	VCT	St. Vincent und die Grenadinen
VE	VEN	Venezuela
#VG		Virgin Islands (UK)
#VI		Virgin Islands (US)
VN	VNM	Vietnam
VU	VUT	Vanuatu
#WF		Wallis & Futuna
WS	WSM	Samoa
YE	YEM	Jemen
#YT		Mayotte
YU	YUG	Jugoslawien
ZA	ZAF	Südafrika
ZM	ZMB	Sambia
ZW	ZWE	Simbabwe
