Anecdote time:
I once worked on a software project where all of the sorting was done using an internal library made by a Large Trustworthy International Corporation. We discovered halfway through that the transitive property was not being maintained during sorts mixing half-width and full-width numerals. (In other words, 1 < 2 < 1 > 1.) Switching to ICU left me ultra-impressed at its thoroughness.
"ICU provides a data-driven, flexible, and run-time-customizable mechanism called "tailoring". Tailoring overrides the default order of code points and the values of the ICU Collation Service attributes"
Also, you sometimes need context to properly sort strings. Examples:
Are you sorting phone book entries or items in a dictionary? In some languages, that does make a difference.
Are you sorting Swiss German or German German?
Given two 'obviously' Italian words, should you apply Italian collation rules? You probably/maybe shouldn't when both are words in an English-language dictionary.
http://site.icu-project.org/
Anecdote time: I once worked on a software project where all of the sorting was done using an internal library made by a Large Trustworthy International Corporation. We discovered halfway through that the transitive property was not being maintained during sorts mixing half-width and full-width numerals. (In other words, 1 < 2 < 1 > 1.) Switching to ICU left me ultra-impressed at its thoroughness.