Is there a standard that defines what is a valid SSID and password?
Section 7.3.2.1 of the 802.11-2007 specification (http://standards.ieee.org/getieee802/download/802.11-2007.pdf) defines SSIDs.
A valid SSID is 0-32 octets with arbitrary contents. A 0-length SSID indicates the wildcard SSID (in probe request frames for instance).
There's no character set associated with the SSID - a 32-byte string of NUL-bytes is a valid SSID.
This implies:
you should never use normal string functions when manipulating generic SSIDs (strcpy() and friends).
you should not assume that the SSID is printable when, for instance, logging it to disk
According to last standard 802.11-2012 (Section 6.3.11.2.2), it can be 0-32 octets with an unspecified or UTF8 encoding.