Hacker News new | ask | show | jobs
by patrickthebold 1409 days ago
TBH reversing a string is probably harder than the others if you consider how strange unicode is.
3 comments

str.insert("\u200F", 0).append("\u200E");

Next question. :)

It's less that it's "hard" and more that it's generally not a sensible operation unless performed on known well-restricted domain (or if you're up to flipping an image of rendered text, I guess).
How is string reversal is done with unicodes?
Combining characters are the most obvious problem.

Both of these are visually identical as "naïve", however the first is written with "ï" being a single code point, while the second is an "i" followed by a combining dieresis. In the first example, the dieresis correctly stays attached to the i, while in the second dieresis incorrectly moves to the v. To do it right, you have to scan through the string and keep the base character and all combining characters in order.

"na\u00efve".split("").reverse().join("") // CORRECT: "evïan" "ev\u00efan"

"nai\u0308ve".split("").reverse().join("") // INCORRECT: "ev̈ian". Should have been "evi\u0308an", not "ev\u0308ian".