Windows에서 Linux로 응용 프로그램을 이식했을 때 문자 인코딩에 문제가 발생했습니다. Visual Studio에서 액센트가있는 문자 (예 : 'é' 'à')는 wchar_t
(g ++에서는 4 바이트)으로 간주되는 반면, Visual Studio에서는 1 바이트 (char). 필자의 코드에서는 악센트 부호가있는 문자를 사용하여 문자 비교를했기 때문에 단위 테스트가 실패했습니다 (리눅스에서와 같이 멀티 바이트입니다).악센트 부호가있는 문자 (wchar_t)를 char로 변환하는 방법은 무엇입니까?
'û'와 같은 악센트 부호가있는 문자를 Linux의 Windows 인코딩 (1 바이트)으로 변환 할 수 있습니까? 아니면 코드를 리팩토링하고 std::wstring
을 사용해야합니까?
wchar_t는 Windows에서는 2 바이트 (UTF-16), 다른 시스템에서는 4 바이트 (UTF-32)입니다. 데이터가 실제로 1 바이트 문자를 사용하고 있다면, 대신에'char'를 사용하고 있기 때문에 charset 코드 페이지 처리의 대상이됩니다. 이를 Linux로 이식하려면 데이터를 UTF 인코딩 (8, 16 또는 32)으로 다시 인코딩 한 다음 휴대용 유니 코드 비교를 사용해야합니다. –
프랑스어 액센트 문자 크기는 Windows 시스템에서 1 바이트 (char)입니다. 그래서 내 코드에서 문자 비교 (예 : if (strMystring [i] == 'é') ...) Linux에서 사용할 수있었습니다 텍스트 편집기가 원본 인코딩을 엉망으로 만들었으므로 이제는 단위 테스트가 제대로 작동하지 않으므로 적합한 휴대용 솔루션을 찾아야합니다. – Aminos
'strMystring'이 라틴 인코딩 된 8 비트 문자열이고 소스 파일 자체가 라틴어로 인코딩되어 일치하는 경우에만'if (strMystring [i] == 'é')'가 작동합니다. 이것은 휴대용이 아닙니다. 좁은 문자열을 사용하여 비 ASCII 데이터를 비교하는 것을 권장하지 않습니다. UTF-8을 사용하는 경우가 아니면 로케일 특정이므로 좁은 문자열을 사용하는 것이 좋습니다. 대신 넓은 문자열을 사용하십시오. –