저는 C로 콘솔 프로그램을 작성하고 있습니다.
프로그램을 실행하는 터미널의 문자 인코딩을 UTF-8로 설정하고 싶습니다. 이는 UTF-8로 인코딩된 문자열을 터미널에 보내고 터미널에서 UTF-8로 인코딩된 문자열을 수신할 것으로 예상한다는 의미입니다.
그러나 프로그램이 실행되는 동안 터미널을 다른 문자 인코딩(UTF-8 이외)으로 설정하면 프로그램이 예상대로 작동하지 않습니다.
그렇다면 내 프로그램에서 터미널이 어떤 문자 인코딩으로 설정되어 있는지 알 수 있는 방법이 있습니까(따라서 프로그램 동작을 그에 따라 변경할 수 있습니까)? 그러한 방법이 있더라도 내 프로그램이 다중 문자 인코딩을 사용하도록 해야 할까요, 아니면 그냥 UTF-8만 사용하면 될까요?
답변1
UTF-8에는 몇 가지 결함이 있으므로 중부 유럽의 일반적인 인코딩이 아닙니다.
UTF-8을 가정하는 프로그램을 작성하는 것은 나쁜 습관입니다. 왜냐하면 바이트 스트림에서 "문자"가 끝나는 위치를 알지 못할 수도 있기 때문입니다.
적절한 프로그램 호출:
setlocale(LC_ALL, "")
시작 시 및 나중에 다음 기능을 사용하십시오.
mbtowc(&wc, input, amt)
표준 입력 또는 파일에서 읽은 멀티바이트 입력을 변환합니다.
그런 다음 데이터를 와이드 문자로 처리하고 다음을 통해 다시 멀티바이트 데이터로 변환합니다.
wctomc(output, wc)
그런 다음 출력은 stdout으로 인쇄됩니다.