3

ユニコードデータをc文字配列として受け取り、ユニコードで正しいSMSとして送信するAPIがあります。

現在、ネイティブ アルファベットの 4 文字に対応する 4 つのコード ポイント値があり、それらを ac char 配列に挿入して正しく送信したいと考えています。

私は試した

char test_data[] = {"\x00\x6B\x00\x6A\x00\x63\x00\x69"};

ここで、0x006B は 1 つのコード ポイントなどです。

内部でAPIが呼び出しています

int len = mbstowcs(NULL,test_data,0);

上記の結果は0になります。0x00 は終端のヌルとして扱われるようです。

上記のコードポイントをc配列に正しく割り当てて、受信側の電話で対応するutf16文字になるようにしたい(これはcharセットをサポートしています)。必要に応じて、API も変更できます。

プラットフォームは glib を使用した Linux です

4

3 に答える 3

4

UTF-16BE はネイティブ実行 (AKA マルチバイト) 文字セットではなくmbstowcs、null で終わる文字列を想定しているため、これは機能しません。Linux を使用しているため、関数はおそらくすべてのchar[]シーケンスが UTF-8 であることを期待しています。

uniconvを使用して、Linux で文字データをトランスコードできると思います。私はICU4Cプロジェクトのみを使用しました。

コードは UTF-16BE データを読み取り、それを一般的な形式 (例: ) にトランスコードし、API を呼び出す前にuint8_tネイティブ実行文字セットにトランスコードします (その後、ネイティブワイド文字セットにトランスコードします)。

注: 実行文字セットに関連するコード ポイントが含まれていない場合、これは損失の多いプロセスになる可能性がありますが、これは API が期待しているものであるため、選択の余地はありません。しかし、上で述べたように、最近の Linux システムはデフォルトで UTF-8 にすべきです。ここでは、C でのコードポイントのトランスコーディングについて少し書きました。

于 2012-06-07T08:26:33.510 に答える
0

wchar_t を使用すると問題が解決すると思います。私が間違っているか、何かが欠けている場合は、私を修正してください。

于 2012-06-07T07:39:14.143 に答える
0

chars と ints の結合を作成する必要があると思います。
typedef union wchars{int int_arr[200]; char char_arr[800]};
あなたの割り当てのためにこのユニオンにデータをmemcpyします

于 2012-06-07T10:53:28.643 に答える