비 ASCII 문자 (Non-ASCII Characters)¶
ASCII가 아닌 문자는 거의 사용되지 않으며 UTF-8 형식을 사용해야 합니다.
영어라도 사용자에게 표시되는 텍스트를 소스에 하드 코딩하면 안 되므로 ASCII가 아닌 문자는 거의 사용하지 않아야 합니다. 그러나 어떤 경우에는 코드에 그러한 단어를 포함하는 것이 적절합니다. 예를 들어, 코드가 외부 소스의 데이터 파일을 구문 분석하는 경우 해당 데이터 파일에 사용된 비ASCII 문자열을 구분 기호로 하드 코딩하는 것이 적절할 수 있습니다. 더 일반적으로는 현지화할 필요가 없는 단위 테스트 코드에 ASCII가 아닌 문자열이 포함될 수 있습니다. 이러한 경우 UTF-8을 사용해야 합니다. UTF-8은 ASCII 이상을 처리할 수 있는 대부분의 도구에서 이해되는 인코딩이기 때문입니다.
16진수 인코딩도 괜찮고 가독성을 높이는 경우 권장됩니다. 예를 들어 "\xEF\xBB\xBF" 또는 더 간단히 ""는 너비가 0인 유니코드 중단 없는 공백 문자로, 소스에 직접 UTF-8로 포함된 경우에는 표시되지 않습니다.
가능하면 u8 접두사를 사용하지 마세요. C++20에서는 C++17과 의미가 상당히 다르며 char 대신 char8_t 배열을 생성하고 C++23에서는 다시 변경됩니다.
char16_t 및 char32_t 문자 유형은 UTF-8이 아닌 텍스트용이므로 사용하면 안 됩니다. 비슷한 이유로 wchar_t를 사용하면 안 됩니다(wchar_t를 광범위하게 사용하는 Windows API와 상호 작용하는 코드를 작성하지 않는 한).
이해하기 쉽게 설명하기¶
핵심: 비ASCII 문자는 드물게, 쓸 땐 UTF-8¶
사용자에게 보이는 텍스트는 영어라도 소스에 하드코딩하지 마세요(현지화 대상). 그래서 비ASCII 문자는 거의 쓸 일이 없습니다. 다만 외부 데이터 파일의 구분 기호나 현지화가 필요 없는 단위 테스트처럼 적절한 경우엔 UTF-8로 쓰세요(가장 널리 이해되는 인코딩).
세부 지침¶
- 가독성을 높인다면 16진수 인코딩도 좋습니다:
"\xEF\xBB\xBF"또는 더 간단히""(폭 0 공백 — 직접 넣으면 안 보임). u8접두사는 가능하면 쓰지 마세요(C++17/20/23에서 의미가 계속 바뀜 —charvschar8_t).char16_t,char32_t,wchar_t는 쓰지 마세요(wchar_t를 많이 쓰는 Windows API와 상호작용하는 경우 제외).