【C言語】uchar.hを使ってUnicode文字を扱う【標準ライブラリ】
uchar.hとは?
uchar.h
はC11で導入されたヘッダーファイルで、主にUnicode文字を扱うためのデータ型と関数を提供します。
これにより、UTF-16やUTF-32を扱うコードを書くことが容易になります。
uchar.hで定義されるデータ型
uchar.h
では、以下の3つのデータ型が定義されています。
char16_t
: 16ビットのUTF-16エンコード文字char32_t
: 32ビットのUTF-32エンコード文字mbstate_t
: マルチバイト状態を表す型
char16_t
と char32_t
は、それぞれ uint_least16_t
と uint_least32_t
を基にした型です。
文字コード変換関数
uchar.h
には、ワイド文字とマルチバイト文字の相互変換を行う関数が含まれています。
mbrtoc16
: マルチバイト文字をUTF-16に変換c16rtomb
: UTF-16をマルチバイト文字に変換mbrtoc32
: マルチバイト文字をUTF-32に変換c32rtomb
: UTF-32をマルチバイト文字に変換
具体的な使用例
UTF-16文字の格納と出力
#include <stdio.h>
#include <uchar.h>
int main() {
char16_t utf16_char = u'あ'; // UTF-16文字の格納
printf("UTF-16 character: %lc\n", utf16_char);
return 0;
}
UTF-32文字の格納と出力
#include <stdio.h>
#include <uchar.h>
int main() {
char32_t utf32_char = U'😊'; // UTF-32の絵文字
printf("UTF-32 character: %lc\n", utf32_char);
return 0;
}
マルチバイトからUTF-16への変換
#include <stdio.h>
#include <uchar.h>
#include <wchar.h>
int main() {
char mbstr[] = "あ";
char16_t c16;
mbstate_t state = {0};
mbrtoc16(&c16, mbstr, sizeof(mbstr), &state);
printf("Converted UTF-16 character: %x\n", c16);
return 0;
}
互換性と注意点
uchar.h
はC11で追加されたため、古いコンパイラでは対応していない可能性があります。
使用する際には、コンパイラがC11をサポートしているかを確認してください。
また、UTF-16やUTF-32を扱う際にはエンディアンに注意する必要があります。