#include #include int is_surrogate_pair(WCHAR high, WCHAR low) { return (high >= 0xD800 && high <= 0xDBFF && low >= 0xDC00 && low <= 0xDFFF); } int main() { // UTF-16でエンコードされた文字列(サロゲートペアや結合文字含む) const WCHAR testString[] = { 0x3042, 0xD841, 0xDE0E, 0x0061, 0x0301, 0x0000 }; // イテレータを使用して文字列を走査 for (int i = 0; testString[i] != 0; ++i) { if (is_surrogate_pair(testString[i], testString[i + 1])) { // サロゲートペアの場合 wprintf(L"Surrogate Pair Found: U+%04X U+%04X\n", testString[i], testString[i + 1]); i++; // 次の文字も処理済み } else if (IsCharAlphaNumericW(testString[i])) { // 結合文字の場合 wprintf(L"Combining Character Found: U+%04X\n", testString[i]); } else { // サロゲートペアでも結合文字でもない場合 wprintf(L"Character Found: U+%04X\n", testString[i]); } } return 0; }