카테고리 없음

문자열을 바이트별로 처리할 때 주의사항

hyuckkim 2021. 10. 12. 10:40

상황 -> lua의 그래픽 라이브러리인 LÖVE에서 사용할 간단한 문자열 parser를 만들고 있었다.

각 줄마다 제목과 여러 개의 key-value 값을 가지는 text가 있는 txt 파일이었다.

각 줄의 마지막 value 값을 문자열로 사용할 때마다 예상치 못한 상황이 발생했다.

 

원인 -> 라인 넘김 처리를 txt == "\n" 로 하고 있었다.

윈도우 시스템에서 라인을 넘기면 아스키 코드로 CR LF가 생긴다. 이 둘 모두에 대해 처리를 해줘야 했다.

내가 아무 생각 없이 만든 파서는 CR만 인식하고 LF는 저장해 뒀다가 입출력 자리를 맨 앞으로 당기는데 사용된다.

입출력 자리를 맨 앞으로 당겨놨기 때문에 문자열 출력은 이상해졌다.

 

해결 -> 라인 넘김 처리를 txt == "\n" or string.byte(txt) == 13 으로 바꿨다.

첫번째 라인을 저장하고 두번째 라인이 빈 라인인 것처럼 처리하게 되었다.

 

결론 -> CR LF 둘다 고려하고 코드를 짜야 한다.

전번 글에서 문자열 처리할 때 '1' * 1 해서 숫자로 바꾸던 것도 뒤에 '13'이 붙어있어서 그런가 싶다.

 

끝.