現在、UNIXとCOBOLで作業しており、C言語で達成する予定の受信メッセージに中国語と韓国語の文字数を指定する必要がありますmbstowsを使用したプログラム。配列内のワイド文字の数をカウントするmbsctows
私は中国の2バイト文字の正確な数を与えず、バイト数を与える次のコードを使用しています。
#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
こんにちは、ありがとうございました。私は上記のコードをコメントアウトしようとしましたが、コードはまだ動作しませんでした。私がこのプログラムに与えようとしている入力は次のとおりです:½»Í¨ÒÐÐÐÉϺ£ÐÂÇøÖ§ÐÐこれはダブルバイトの中国語文字のバイトストリームです。それは実際には20バイトですが、私のCプログラムは中国語文字であることを認識し、2バイト文字であるため、カウントを10にします。すべての応答は非常に高く評価されます...事前におかげ... – Abhijeet
設定したロケールがシステムにインストールされていますか?シェルでLC_ALLまたはLC_CTYPEのセットを実行すると、それはOSによって受け入れられますか? –
こんにちは、私はプログラムを遵守し、正常に実行することができました...唯一のことは、ダブルバイト文字の入力バイトストリームに中国語文字セットをrecogizingされていないということです.....私は、 setlocale(LC_ALL、 "zh_CN.GB18030")== 0){printf( "ロケールの設定に失敗しました\ n"); 1を返します。 } – Abhijeet