2014-04-09 1 views
5

슬로바키아어에서 단어의 문자열에서 문자를 추출하려고합니다. 예를 들어, "TURTLE"이라는 단어는 "KORYTNAČKA"입니다. 그러나, 나는이 문자열을 추출 할 때 그것은 "C"문자를 건너 뜁니다 :루아 gmatch 홀수 문자 (슬로바키아 알파벳)

local str = "KORYTNAČKA" 
for c in str:gmatch("%a") do print(c) end 
--result: K,O,R,Y,T,N,A,K,A 

내가 this page을 읽고있다 그리고 나는 또한 단지 세트로 문자열 자체에 붙여 시도했지만, 그것은 온다 이상한 무엇인가 :

local str = "KORYTNAČKA" 
for c in str:gmatch("["..str.."]") do print(c) end 
--result: K,O,R,Y,T,N,A,Ä,Œ,K,A 

누구나 이것을 해결하는 방법을 알고 계십니까?

+1

UTF-8 대신 1 바이트 슬로바키아어 코드 페이지로 인코딩 된 텍스트 사용 –

답변

4

루아는 8 비트 클린입니다. 즉, 루아 문자열은 모든 문자가 1 바이트라고 가정합니다. "%a" 패턴은 1 바이트 문자와 일치하므로 예상 한 결과가 아닙니다.

패턴 "["..str.."]"은 유니 코드 문자가 두 개 이상의 바이트를 포함 할 수 있기 때문에 작동합니다.이 패턴에서 문자는 문자와 일치 할 수 있도록 세트에서이 바이트를 사용하기 때문입니다. UTF-8을 사용하는 경우


,이 같은 루아 5.2에서 하나의 UTF-8 바이트 시퀀스와 일치하는 패턴 "[\0-\x7F\xC2-\xF4][\x80-\xBF]*"를 사용할 수 있습니다

루아 5.1 (에서
local str = "KORYTNAČKA" 
for c in str:gmatch("[\0-\x7F\xC2-\xF4][\x80-\xBF]*") do 
    print(c) 
end 

되는 것입니다

이 패턴에 대한 자세한 내용은
local str = "KORYTNAČKA" 
for c in str:gmatch("[%z\1-\127\194-\244][\128-\191]*") do 
    print(c) 
end 

, Equivalent pattern to “[\0-\x7F\xC2-\xF4][\x80-\xBF]*” in Lua 5.1를 참조하십시오 버전 코로나 SDK이 사용) 사용하고 있습니다.

+2

여기에 메모 추가 : 곧 나오는 5.3 버전에서는 기본 'utf8' 라이브러리가 추가됩니다. –

+0

이것을 시도하면 오류가 발생합니다 : "잘못된 패턴 (누락 된 ')')". 코로나 SDK를 사용하여 루아에서 프로그래밍하고 있습니다. –

+0

@ArdentKid 코로나 SDK가 루아 5.1을 사용하고 있기 때문에 당신이 저를 잡았다 고 생각합니다. 그러나 아직 작동하지는 않았습니다. 나는 [질문] (http://stackoverflow.com/q/22956136/1009479)에 이것에 대해 물었고 누군가가 내 대답을하면이 대답을 업데이트 할 것이다. –

1

루아에는 유니 코드 문자열에 대한 처리가 내장되어 있지 않습니다. Ä,ŒČ 문자의 UTF-8 인코딩을 나타내는 2 바이트임을 알 수 있습니다.

Yu Hao는 이미 샘플 용액을 제공했지만 자세한 내용은 입니다.

나는 Lua 5.1에서 this solution이 제대로 작동하는지 테스트 한 결과, reserve link입니다. utf8sub 함수를 사용하여 개별 문자를 추출 할 수 있습니다 (sample 참조).

관련 문제