c함수 swscanf가 갑작스럽게 utf8로 작동하는 상황에 대해
윈도우와 리눅스에서 사용하는 크로스 플랫폼 코드를 다루고 있었다.
이 코드가 갑자기 리눅스에서 에러가 난다.
거진 한나절을 디버깅하고서야 원인을 찾았는데 swscanf를 사용하자 유니코드 스트링인 wstring이나 wchar_t의 값이 utf8로 바뀌어 있는 것이다. 심지어 wchar_t안에서 그렇게 저장된다. 리눅스에서 wchar_t는 4바이트인데 이 안에 utf8을 넣고 있더라....황당
wchar_t와 utf8은 어울리지 않는다.
프로그래머라면 당연히 아는 사실.....swscanf는 왜 하필 이런 짓을 할까...
약간 감은 오는데 너무 심했다.
swscanf를 사용할 때에는 인코딩이 바뀔 수 있으니 주의하자.