You must be doing something wrong. Rotary encoders work fine (even the cheap ones).
By "work fine" I mean they either work or they don't. They don't mysteriously stop working on alternate Tuesdays. If they do then suspect the software.
Interrupts are bad for reading switches/rotary encoders because of switch bouncing. Unfortunately most of the libraries use interrupts because newbies can't stop using "delay()", which means polling won't work for them.