Hola,
El problema no es de UTF, el caracter de nueva línea en cualquier tabla de caracteres conocida es el número [10] y el retorno de carro es el numero [13]. En Windows se utiliza la combinación [10, 13] para identificar un salto de línea y en Linux se utliza solamente el [10]. En UTF, ASCII y cualquier otra tabla el código de nueva línea es el [10].
El compilador de C utiliza los códigos de escape para facilitar la escritura de esos códigos, puesto que no tienen representación visual en la tabla ASCII (técnicamente no puedes ver un retorno de carro). Así que los 'escape codes' de C son \n para el código char 10 y \r para el código char 13.
Cuando escribes '\n' en el código fuente de un programa el compilador se encarga de convertirlo en el char con código [10] y escribirlo en el código objeto. Es decir al programa compilado no le llega un '\n' sino le llega el código binario que lo identifica con el char con código [10].
Y no es lo mismo poner:
En el primer caso estas comparando un char en el segundo un int.
Saludos,