2012-10-28 3 views
1

루아가 유니 코드를 완벽하게 지원하지 않는다는 것을 알고 있었지만이 문제를 해결하기위한 해결 방법이 있어야합니까? 다음의 예는코로나 SDK에서 유니 코드 문자열을 뒤집는 방법은 무엇입니까?

print(string.reverse("أحمد")) 

그에 도움이 작동하지 않도록 string.reverse은 유니 코드와 함께 작동하지 않습니다?

+0

UTF8 등으로 작업하고있는 유니 코드의 맛. Wiki에서 이것을 검토해 보셨습니까? http://lua-users.org/wiki/LuaUnicode –

답변

4

코로나 SDK는 인코딩으로 UTF-8을 사용하는 것으로 보입니다.

대신 모든 바이트의 문자열의 모든 유니 코드 코드 포인트를를 반전하려면 해당 코드를 사용할 수 있습니다

function utf8reverse(str) 
    return str:gsub("([\194-\244][\128-\191]+)", string.reverse):reverse() 
end 

print(utf8reverse("أحمد")) 

은 다음과 요령은 다음과 같습니다 멀티 바이트 유니 코드 코드 포인트는 항상 시작을 바이트는 11xx xxxx이고 그 뒤에 하나 또는 여러 바이트 10xx xxxx이옵니다. 첫 번째 단계는 각 멀티 바이트 코드 포인트의 모든 바이트를 반대로 변환 한 다음 모든 바이트를 반대로 변환하는 것입니다.

참고 : 유니 코드 문자가 여러 코드 포인트로 구성되어 있으면이 간단한 트릭이 작동하지 않습니다. 완전한 지원을 위해서는 큰 유니 코드 데이터베이스가 필요합니다.

+0

멋진 트릭; 각 단어의 문자를 뒤집은 다음 전체 문자열을 뒤집어서 문자열에서 단어를 뒤집어 놓는 것을 생각 나게합니다. –

관련 문제