The result strengthens Reading's play-off credentials at the expense of Charlton's survival hopes and now means the Royals have picked up 16 points from 18 on the road since the beginning of February.
Charlton showed confidence in the early stages, exemplified when Astrit Ajdarevic tried to clip a pass through to Simon Church, a former Reading player, with audacious technique.
Much of the play flowed along Charlton's right flank with Reading's Jordan Obita and Jobi McAnuff looking to cross for Pavel Pogrebnyak, while the home side looked to attack through Callum Harriott.
However, for all the gusto exhibited by both sides neither goalkeeper was meaningfully employed in the first half.
With 20 minutes gone, Jordan Cousins skipped past a couple of challenges and into the Reading penalty area but the Charlton midfielder could only fire tamely at Alex McCarthy.
Church was then penalised for pushing McCarthy six minutes later when right in front of goal before Ben Hamer was forced to push Chris Gunter's cross away from danger on 32 minutes.
Ordinarily these incidents might not have been noteworthy but, as the first half stuttered towards an end, the game was so bereft of entertainment that they were still the best it had to offer.
It appeared that Ajdarevic became aware of this as he tried to produce another tricky pass - hit by twisting his striking leg behind his standing one - but he again failed to find a team-mate.
Diego Poyet was playing in his 15th game for the club and doing so with intelligence as he tracked the midfield runs of Reading's Danny Guthrie and Williams while spraying the occasional accurate cross-field ball.
The break was welcome respite for both sides with the home supporters growing increasingly restless and Reading created a chance within two minutes of the restart.
Adam Le Fondre broke on the visitors' right and cut the ball across the box to Williams who could not control his effort and sliced wide with his weaker left foot.
Reading then began to exert sustained pressure that culminated in a fine chance for Royston Drenthe who could only muster an air shot when unmarked at a corner. Another chance fell to Le Fondre two minutes later but he shot wide.
Then in the 61st minute, Drenthe was fouled 30 yards from goal and Guthrie struck the resulting free-kick towards the tope corner but Hamer produced a brilliant save.
Reading's pressure then deservedly yielded a goal in the 74th minute. Guthrie burst from midfield and perfectly delayed his ball to Williams who rifled the ball into the top-left corner from 12 yards out.