mbstowcs()
은 현재 로켈의 멀티 바이트 인코딩에서 넓은 문자열로 문자열을 변환합니다. 넓은 문자열은 반드시 유니 코드는 아니지만 Linux에서는 (UCS32)입니다.
로케일을 zh_CN.UTF-8
으로 설정하면 현재 로켈의 멀티 바이트 인코딩은 GB2312가 아닌 UTF-8이됩니다. 멀티 바이트 인코딩을 사용하여 입력을 처리하려면 GB2312 로켈을 설정해야합니다.
size_t n = strlen(src) + 1;
wchar_t *dest = malloc(n * sizeof dest[0]);
이 (glibc는이 확장자가 :
C 표준은 필요한 와이드 문자의 수에 상한으로 strlen(src)
을 사용할 수 있도록 하나의 멀티 바이트 문자가 최대 한 다양한 캐릭터를 생성합니다 것을 의미한다 표준 mbstowcs()
인터페이스에 NULL
포인터를 전달하여 정확히 얼마나 많은 와이드 문자가 생성되는지 알아 내야하지만 Android에서는 도움이되지 않습니다.) 다음과 같이 작동합니다 :
size_t n = mbstowcs(NULL, src, 0) + 1;
전달되어야하는 n
의 값은 종료 널 너비 문자를 포함하여 dest
포인터를 통해 작성되어야하는 최대 문자 수입니다.
그러나 Android 용으로 성공적으로 컴파일 된 libiconv
을 사용해야합니다. 이 도구를 사용하면 원하는 원본 및 대상 문자 집합을 명시 적으로 선택할 수 있으며이 문제에 훨씬 더 적합합니다.
출처
2011-11-25 06:39:43
caf
테스트 할 때 n은 항상 1입니다. 첫 번째 줄의 의미는 무엇입니까? – Aaron
@Aaron : 죄송합니다. 실제로 mbstowcs()에 대한 glibc 확장이며 Android에서는 사용할 수 없습니다 - 답변을 업데이트했습니다. – caf