Limits on strings are in bytes[1] everywhere it matters. llStringLength returns a count of characters (code points, presumably).
Luau already gives us string.len() utf8.len() to distinguish between the two.
ll.OwnerSay("bytes: " .. string.len("abcdᴥ")) // 7
ll.OwnerSay("points: " .. utf8.len("abcdᴥ")) // 5
The suggested approach to getting the byte length of a string in LSL is to convert it to base 64, parse that to a list to strip padding, cast the list back to a string, get the length of
that
string (since the code point count will now (nearly) match the byte count), and do some math to clean it up. For complexity, performance, and GC, It would be nice if we didn't have to do that.
Mono having a utf-16 soul might complicate things? - although vm 2025 certainly uncomplicates them again if so.
[1]
... etc
----