Originally Posted by Aviatrix
ICAO codes always start with the two-letter country code
Not quite correct.
The first letter of ICAO codes (outside the US/Canada) designates the continental region (E = Western Europe, V = South Asia, etc...), the second designates the countrywise/regional region (G = Great Britain, D = Deutschland, I = Northern India, etc..), and the last two letters designate the local aerodrome (AM = Amsterdam, DP = Delhi Palam, etc..).
Hence
EHAM = Western Europe, Holland, Amsterdam;
VIDP = South Asia, Northern India, Delhi Palam; etc...
Originally Posted by Aviatrix
Canada's main code is CY with a small number of airports using CW and CZ. The USA has the whole K series from KA to KZ.
Canadian aerodromes which had weather stations at the time of allocation of codes were designated as CYxx, those without stations were designated otherwise.