私は初歩的な手書きの語彙スキャナーに取り組んでおり、UTF-8 入力をサポートしたいと考えています (もう 1970 年ではありません!)。入力文字はstdin、ファイルから一度に 1 つずつ読み取られ、空白が表示されるまでバッファーにプッシュされます。fgetc()代わりにchar[]、UTF-8 文字を構成するバイトを返し、文字列としての結果...十分に簡単ですが、滑りやすい斜面になります. 車輪の再発明に時間を無駄にするのではなく、代わりにICUのような既存のテスト済みライブラリを使用したいと思います。fgetc()これで、 、isspace()、で動作する非 UTF-8 サポート コードができました。strcmp()など、ICU を使用するために更新しようとしています。これは ICU での初めての試みであり、ドキュメントを読み、Google コード検索で使用例を見つけようとしていますが、まだ混乱している点がいくつかあります。誰かが明確にしてくれることを願っています。
このu_fgetc()関数は を返しUChar、そして... をu_fgetcx()返しますUChar32... ドキュメントu_fgetcx()ではコードポイントの読み取りに を使用することを推奨しているため、それから始めています。上記と同じアプローチを維持していますが、s のUChar32代わりに s をバッファーにプッシュしていcharます。
文字を既知の値と比較する適切な方法は何ですか? もともと
if (c == '+')、プラス記号が入力から取得されたかどうかを確認することができました。cGCCは a の場合に文句を言いません(これはとUChar32の比較です) が、これは本当に適切ですか?UChar32charstrcmp()バッファリングされた文字を既知の値と比較するために使用できましたif ((strcmp(buf, "else") == 0)。ICU から提供されており、既知のリテラルを指定するにはおよびマクロu_strcmp()を使用する必要があると思いますが、確かではありません。ドキュメンテーションは、それらが結果として. ここでのガイダンスは大歓迎です。U_STRING_DECLU_STRING_INITUChar[]UChar32[]一連の数字を読み取った後、それらを変換して
strtol()作業できるようにしました。現在コンバート中ですが、ICU で同様の機能が提供されてUChar32[]いますか?