Lua string comparison (using the == operator) is done byte-by-byte.
That means that == can only be used to compare Unicode strings for
equality if the strings have been normalized in one of the four Unicode
normalizations. (See the [Unicode FAQ on normalization] for details.) The standard Lua library does not provide any facility for normalizing Unicode strings.
Consequently, non-normalized Unicode strings cannot be reliably used as
table keys.
If you want to use the Unicode notion of string equality,
or use Unicode strings as table keys, and you cannot
guarantee that your strings are normalized, then you'll have to write or find a
normalization function and use that; this is non-trivial exercise!
The Lua comparison operators on strings (< and <=) use the C
function
strcoll
which is locale dependent. This means that two strings
can compare in different ways according to what the current locale is.
For example, strings will compare differently when using Spanish
Traditional sorting to that when using Welsh sorting.