В настоящее время я работаю над UNIX и COBOL и выполнил требование, в котором мне нужно указать количество китайских и корейских символов в полученном сообщении, которое я планирую выполнить в программе на языке C, используя mbstows.
IЯ использую приведенный ниже код, который не дает правильный счет для китайских двухбайтовых символов, но дает количество байтов.
#include <wchar.h>
#include <stdio.h>
#include <locale.h>
int main(int argc, char *argv[] )
{
if ( argc != 2 ) /* argc should be 2 for correct execution */
{
/* We print argv[0] assuming it is the program name */
printf( "usage: %s filename", argv[0] );
}
int Size = getCharCount(argv[1]);
printf ("THE CHAR COUNT %d", Size);
return Size;
}
int getCharCount(char *argv)
{
wchar_t *wcsVal = NULL;
char *mbsVal = NULL;
char* localeInfo;
setlocale(LC_ALL, "zh_CN.GB18030");
/* verify locale is set */
if (setlocale(LC_ALL, "") == 0)
{
/* printf(stderr, "Failed to set locale\n"); */
return 1;
}
mbsVal = argv;
printf (" MBSVAL %s\n", mbsVal);
/* validate multibyte string and convert to wide character */
int size = mbstowcs(NULL, mbsVal, 0);
if (size == -1)
{
printf("Invalid multibyte\n");
return 1;
}
return size;
}
Ценю ваш добрый ответ ...
С уважением
Akm