5

中国語またはアラビア語の utf-8 文字があります。ASCII 文字の値を取得するように、その UTF-8 文字の値を取得する必要があります。「C」で実装する必要があります。あなたの提案を教えてください。

例えば:

char array[3] = "ab";
int v1,v2;

v1 = array[0];
v2 = array[1];

上記のコードでは、v1 と v2 で対応する ASCII 値を取得します。UF8 文字列の場合と同じように、文字列内の各文字の値を取得する必要があります。

4

4 に答える 4

5

C 言語の C11 標準バージョンのみが UTF-8 サポートを提供するため、対象とする標準に応じて、C11 機能 ( ) を使用するか、 ICU<uchar.h>などの UTF ライブラリに依存することができます。

于 2012-12-27T14:39:16.760 に答える
5

UTF-8 文字のようなものはありません。Unicode 文字があり、UTF-8 などの Unicode 文字のエンコーディングがあります。

おそらく必要なのは、UTF-8 でエンコードされ、単一の Unicode 文字を表す複数のバイトを Unicode コード ポイントにデコードすることです。

このための C ソース コードがネット上にたくさんあります。UTF-8 デコード Cをグーグルで検索してください。

アップデート:

明らかに探しているのは、複数の文字の UTF-8 デコード、つまり、バイト配列 (UTF-8 でデコードされたテキスト) を int (Unicode コード ポイント) の配列にデコードする関数です。

答えは同じです。Google を使用してください。そこにはたくさんのCコードがあります。

于 2012-12-27T14:40:28.373 に答える
5

C および C++ モデルは、エンコーディングがロケールに関連付けられているため、そのモデルを使用するコードは、ロケールが何であれ、ロケールのエンコーディングに対して機能します。

ナロー エンコーディングに UTF8 を使用するロケールがある場合。mbtowc()mbrtowc()mbstowcsおよびを参照mbsrtocws()してください。これらは非常に簡単に使用できるはずです。

于 2012-12-27T15:42:43.990 に答える
4

icuならU8_NEXTでutf8文字をスキップできる

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <unicode/utf.h>
#include <unicode/ustring.h>

int main(int argc, char **argv)
{
    const char s[] = "日本語";

    UChar32 c;
    int32_t k;
    int32_t len = strlen(s);

    for (k = 0; k < len;) {
        U8_NEXT(s, k, len, c);
        printf("%d - %x\n", k, c);
    }

    return 0;

}

でコンパイルするにはgcc utf.c -o utf $(icu-config --ldflags --ldflags-icuio)

ここでのインデックスは、文字kのエンコーディングの開始オフセットを示しますj。文字cの Unicode 値 (32 ビット) が含まれます。

于 2012-12-27T15:58:23.530 に答える