A character set is all the characters in a font. It might be a few hundred or many thousands.
A codepage is the set of characters (or a subset in a large font) that can be typed directly from the keyboard for a particular keyboard layout.
A codepage and "an encoding" are essentially the same thing. Most codepages correspond to character sets in older 8-bit (256-character) font encoding schemes, such as ASCII.
Unicode is a standard system for assigning unique codes to semantically distinct characters in most of the world's languages.
In modern OpenType Unicode-based fonts: Unicode > character sets >= codepages
(This is a bit of a simplification, and I have not even talked about glyphs vs. characters...)