Charles, 26, hit four sixes and seven fours in his entertaining 70-ball knock after the visitors elected to bat in the day-night game at the Premadasa stadium.
Stand-in captain Marlon Samuels chipped in with a quickfire 61-ball 63 before being run out in the penultimate over.
The match was reduced to 38-overs a side following a rain interruption of more than three hours. Sri Lanka require 225 runs for a win according to the revised target.
Jermaine Blackwood (9), making his one-day debut, also departed early but Charles steadied the innings with a 70-run stand with Darren Bravo (21) for the fourth wicket.
More From This Section
Charles raced to his fourth one-day half-century with a paddle swept boundary followed by a massive six over the long-on fence, Ajantha Mendis being the unlucky bowler.
Just when Charles looked set for a bigger score, he was trapped leg before by left-arm spinner Milinda Siriwardana (2-27).
Samuel's dismissal triggered a batting collapse with three more run outs in quick succession that saw the West Indies being bundled out off 37.4 overs.
The third and final one-dayer will be played on Saturday followed by two Twenty20 games.
Sri Lanka swept the preceding Test series 2-0.