size_t println(const __FlashStringHelper *);
size_t println(const String &s);
size_t println(const char[]);
size_t println(char);
size_t println(unsigned char, int = DEC);
size_t println(int, int = DEC);
size_t println(unsigned int, int = DEC);
size_t println(long, int = DEC);
size_t println(unsigned long, int = DEC);
size_t println(double, int = 2);
size_t println(const Printable&);
size_t println(void);
The version that takes a single 'char' does a .write() of that char. The version that take a single UNSIGNED char prints the numeric value of the unsigned char. Since the character code 1 is not printable but the value 1 is printable that explains why you see one and not the other.
If you want to print the value of the char, use:
.println((int)x);
That tells the compiler to convert the 'char' to 'int'.