2

中国語の文字を表示するために、既存の非 Unicode の C プロジェクトを適応させる必要があります。締め切りが短く、私は C とエンコーディングが初めてなので、GUI アプリケーションでの中国語テキストの表示をサポートするために、システム ロケールを簡体字中国語 PRC に変更するというルートをたどりました。これにより、プロジェクトのエンコーディング (Visual Studio 2010) が簡体字中国語 (GB2312) に変更されました。

特殊文字 (例: 度記号、上付き文字 2 など) が疑問符として表示されることを除いて、すべてが機能します。これは、アスキー テーブルで \260、つまり度記号の 8 進数値を渡していたためだと思いますが、これはもはや gb2312 テーブルでは何にも等しくなりません。 

キーパッドに度記号を表示するワークフローは次のとおりです。 

display_function( データ, '\260' ); //度記号の 8 進数値をキーパッドに渡す 

この display_function は、キーパッドに表示するために整数入力を文字列に変換するために使用されます。 

data->[ pos ] = (char) ch; 

基本的に、これ (およびその他の特殊文字) を正しく表示する必要があります。現在のセットアップを使用してこのシンボルを渡す方法はありますか? 

gb23212 の char リストによると、シンボルはサポートされているため、現在の考えでは、シンボルの 8 進数値を計算し、既存の関数をそのまま維持することです。これらは現在、値を文字として渡します。以下の表を使用します。 

http://ash.jp/code/cn/gb2312tbl.htm

および次の式で 8 進数値を取得します。 

行に関連付けられた 8 進数に 10 を掛けて、列に関連付けられた 8 進数に加算します。 

私はこれがあると信じていますA1E0 x 10 + 3 = 414403. 

ただし、これを display_function に渡そうとすると、「エラー C2022: '268' : 文字に対して大きすぎます」というメッセージが表示されます。

私はこれについて間違っていますか?既存の関数は広く使用されているため、変更したくないのですが、ワイド文字を使用するように関数を変更する必要がありますか? 

上記が複雑で、誤った仮定で満たされている場合は、お詫び申し上げます。私はこれを 1 週間か 2 週間理解しようとしてきましたが、エンコーディング、文字セット、およびロケールがますます混乱しているようです!

前もって感謝します

4

1 に答える 1

1

現在の関数が 8 ビット文字のみをサポートしていて、それらを使用して 16 ビット文字を表示する必要がある場合、おそらくあなたの推測は正しいでしょう。「char」の代わりに「wchar」などを使用するように関数を変更する必要があるかもしれません。

これらの関数が他のプロジェクトで使用されている場合に備えて、他のユーザーに互換性を提供するために、それらを他の名前で複製することもできます。

ただし、プロジェクトが 1 つだけの場合は、プロジェクトのほぼすべての場所で「char」を「wchar」に置き換える可能性を確認する必要があります。

于 2012-10-25T10:39:07.460 に答える