【C言語】uchar.hを使ってUnicode文字を扱う【標準ライブラリ】

【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_tchar32_t は、それぞれ uint_least16_tuint_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を扱う際にはエンディアンに注意する必要があります。

ページの先頭へ戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です