enum class id : int_least32_t {
other = 1,
unknown = 2,
ASCII = 3,
ISOLatin1 = 4,
ISOLatin2 = 5,
ISOLatin3 = 6,
ISOLatin4 = 7,
ISOLatinCyrillic = 8,
ISOLatinArabic = 9,
ISOLatinGreek = 10,
ISOLatinHebrew = 11,
ISOLatin5 = 12,
ISOLatin6 = 13,
ISOTextComm = 14,
HalfWidthKatakana = 15,
JISEncoding = 16,
ShiftJIS = 17,
EUCPkdFmtJapanese = 18,
EUCFixWidJapanese = 19,
ISO4UnitedKingdom = 20,
ISO11SwedishForNames = 21,
ISO15Italian = 22,
ISO17Spanish = 23,
ISO21German = 24,
ISO60DanishNorwegian = 25,
ISO69French = 26,
ISO10646UTF1 = 27,
ISO646basic1983 = 28,
INVARIANT = 29,
ISO2IntlRefVersion = 30,
NATSSEFI = 31,
NATSSEFIADD = 32,
// NATS-DANO (33) とNATS-DANO-ADD (34) はcomp-nameの曖昧さにより除外
ISO10Swedish = 35,
KSC56011987 = 36,
ISO2022KR = 37,
EUCKR = 38,
ISO2022JP = 39,
ISO2022JP2 = 40,
ISO13JISC6220jp = 41,
ISO14JISC6220ro = 42,
ISO16Portuguese = 43,
ISO18Greek7Old = 44,
ISO19LatinGreek = 45,
ISO25French = 46,
ISO27LatinGreek1 = 47,
ISO5427Cyrillic = 48,
ISO42JISC62261978 = 49,
ISO47BSViewdata = 50,
ISO49INIS = 51,
ISO50INIS8 = 52,
ISO51INISCyrillic = 53,
ISO54271981 = 54,
ISO5428Greek = 55,
ISO57GB1988 = 56,
ISO58GB231280 = 57,
ISO61Norwegian2 = 58,
ISO70VideotexSupp1 = 59,
ISO84Portuguese2 = 60,
ISO85Spanish2 = 61,
ISO86Hungarian = 62,
ISO87JISX0208 = 63,
ISO88Greek7 = 64,
ISO89ASMO449 = 65,
ISO90 = 66,
ISO91JISC62291984a = 67,
ISO92JISC62991984b = 68,
ISO93JIS62291984badd = 69,
ISO94JIS62291984hand = 70,
ISO95JIS62291984handadd = 71,
ISO96JISC62291984kana = 72,
ISO2033 = 73,
ISO99NAPLPS = 74,
ISO102T617bit = 75,
ISO103T618bit = 76,
ISO111ECMACyrillic = 77,
ISO121Canadian1 = 78,
ISO122Canadian2 = 79,
ISO123CSAZ24341985gr = 80,
ISO88596E = 81,
ISO88596I = 82,
ISO128T101G2 = 83,
ISO88598E = 84,
ISO88598I = 85,
ISO139CSN369103 = 86,
ISO141JUSIB1002 = 87,
ISO143IECP271 = 88,
ISO146Serbian = 89,
ISO147Macedonian = 90,
ISO150 = 91,
ISO151Cuba = 92,
ISO6937Add = 93,
ISO153GOST1976874 = 94,
ISO8859Supp = 95,
ISO10367Box = 96,
ISO158Lap = 97,
ISO159JISX02121990 = 98,
ISO646Danish = 99,
USDK = 100,
DKUS = 101,
KSC5636 = 102,
Unicode11UTF7 = 103,
ISO2022CN = 104,
ISO2022CNEXT = 105,
UTF8 = 106,
ISO885913 = 109,
ISO885914 = 110,
ISO885915 = 111,
ISO885916 = 112,
GBK = 113,
GB18030 = 114,
OSDEBCDICDF0415 = 115,
OSDEBCDICDF03IRV = 116,
OSDEBCDICDF041 = 117,
ISO115481 = 118,
KZ1048 = 119,
UCS2 = 1000,
UCS4 = 1001,
UnicodeASCII = 1002,
UnicodeLatin1 = 1003,
UnicodeJapanese = 1004,
UnicodeIBM1261 = 1005,
UnicodeIBM1268 = 1006,
UnicodeIBM1276 = 1007,
UnicodeIBM1264 = 1008,
UnicodeIBM1265 = 1009,
Unicode11 = 1010,
SCSU = 1011,
UTF7 = 1012,
UTF16BE = 1013,
UTF16LE = 1014,
UTF16 = 1015,
CESU8 = 1016,
UTF32 = 1017,
UTF32BE = 1018,
UTF32LE = 1019,
BOCU1 = 1020,
UTF7IMAP = 1021,
Windows30Latin1 = 2000,
Windows31Latin1 = 2001,
Windows31Latin2 = 2002,
Windows31Latin5 = 2003,
HPRoman8 = 2004,
AdobeStandardEncoding = 2005,
VenturaUS = 2006,
VenturaInternational = 2007,
DECMCS = 2008,
PC850Multilingual = 2009,
PCp852 = 2010,
PC8CodePage437 = 2011,
PC8DanishNorwegian = 2012,
PC862LatinHebrew = 2013,
PC8Turkish = 2014,
IBMSymbols = 2015,
IBMThai = 2016,
HPLegal = 2017,
HPPiFont = 2018,
HPMath8 = 2019,
HPPSMath = 2020,
HPDesktop = 2021,
VenturaMath = 2022,
MicrosoftPublishing = 2023,
Windows31J = 2024,
GB2312 = 2025,
Big5 = 2026,
Macintosh = 2027,
IBM037 = 2028,
IBM038 = 2029,
IBM273 = 2030,
IBM274 = 2031,
IBM275 = 2032,
IBM277 = 2033,
IBM278 = 2034,
IBM280 = 2035,
IBM281 = 2036,
IBM284 = 2037,
IBM285 = 2038,
IBM290 = 2039,
IBM297 = 2040,
IBM420 = 2041,
IBM423 = 2042,
IBM424 = 2043,
IBM500 = 2044,
IBM851 = 2045,
IBM855 = 2046,
IBM857 = 2047,
IBM860 = 2048,
IBM861 = 2049,
IBM863 = 2050,
IBM864 = 2051,
IBM865 = 2052,
IBM868 = 2053,
IBM869 = 2054,
IBM870 = 2055,
IBM871 = 2056,
IBM880 = 2057,
IBM891 = 2058,
IBM903 = 2059,
IBM904 = 2060,
IBM905 = 2061,
IBM918 = 2062,
IBM1026 = 2063,
IBMEBCDICATDE = 2064,
EBCDICATDEA = 2065,
EBCDICCAFR = 2066,
EBCDICDKNO = 2067,
EBCDICDKNOA = 2068,
EBCDICFISE = 2069,
EBCDICFISEA = 2070,
EBCDICFR = 2071,
EBCDICIT = 2072,
EBCDICPT = 2073,
EBCDICES = 2074,
EBCDICESA = 2075,
EBCDICESS = 2076,
EBCDICUK = 2077,
EBCDICUS = 2078,
Unknown8BiT = 2079,
Mnemonic = 2080,
Mnem = 2081,
VISCII = 2082,
VIQR = 2083,
KOI8R = 2084,
HZGB2312 = 2085,
IBM866 = 2086,
PC775Baltic = 2087,
KOI8U = 2088,
IBM00858 = 2089,
IBM00924 = 2090,
IBM01140 = 2091,
IBM01141 = 2092,
IBM01142 = 2093,
IBM01143 = 2094,
IBM01144 = 2095,
IBM01145 = 2096,
IBM01146 = 2097,
IBM01147 = 2098,
IBM01148 = 2099,
IBM01149 = 2100,
Big5HKSCS = 2101,
IBM1047 = 2102,
PTCP154 = 2103,
Amiga1251 = 2104,
KOI7switched = 2105,
BRF = 2106,
TSCII = 2107,
CP51932 = 2108,
windows874 = 2109,
windows1250 = 2250,
windows1251 = 2251,
windows1252 = 2252,
windows1253 = 2253,
windows1254 = 2254,
windows1255 = 2255,
windows1256 = 2256,
windows1257 = 2257,
windows1258 = 2258,
TIS620 = 2259,
CP50220 = 2260
};
using enum id;
概要
text_encoding::idは、IANA Character Setsレジストリに登録された文字エンコーディングを識別するための列挙型である。各列挙子のMIB値はIANAレジストリで定義された値に一致する。
using enum id;により、text_encoding::UTF8のように列挙子に直接アクセスできる。
基底型はint_least32_tであり、RFCのINTEGER型との前方互換性を持つ。
特殊な値
| 列挙子 | 値 | 説明 |
|---|---|---|
other |
1 | IANAに登録されていないエンコーディング。名前で比較される |
unknown |
2 | エンコーディングが不明(デフォルト構築時) |
Unicode関連の列挙子
| 列挙子 | 値 | IANA名 | 説明 |
|---|---|---|---|
UTF8 |
106 | UTF-8 | 8ビット可変長のUnicodeエンコーディング。現代のテキスト処理で最も広く使用される |
UTF16 |
1015 | UTF-16 | 16ビット可変長のUnicodeエンコーディング。バイトオーダーはBOMまたはコンテキストで決定される |
UTF16BE |
1013 | UTF-16BE | UTF-16のビッグエンディアン形式 |
UTF16LE |
1014 | UTF-16LE | UTF-16のリトルエンディアン形式 |
UTF32 |
1017 | UTF-32 | 32ビット固定長のUnicodeエンコーディング |
UTF32BE |
1018 | UTF-32BE | UTF-32のビッグエンディアン形式 |
UTF32LE |
1019 | UTF-32LE | UTF-32のリトルエンディアン形式 |
UTF7 |
1012 | UTF-7 | 7ビットASCII互換のUnicodeエンコーディング。現在は非推奨 |
UTF7IMAP |
1021 | UTF-7-IMAP | IMAP用のUTF-7変種 |
UCS2 |
1000 | ISO-10646-UCS-2 | UCS-2。BMPの文字のみを扱う固定長2バイトエンコーディング |
UCS4 |
1001 | ISO-10646-UCS-4 | UCS-4。固定長4バイトエンコーディング |
CESU8 |
1016 | CESU-8 | UTF-8の互換エンコーディング。サロゲートペアを個別にエンコードする |
BOCU1 |
1020 | BOCU-1 | Binary Ordered Compression for Unicode |
SCSU |
1011 | SCSU | Standard Compression Scheme for Unicode |
Unicode11 |
1010 | UNICODE-1-1 | Unicode 1.1 |
Unicode11UTF7 |
103 | UNICODE-1-1-UTF-7 | Unicode 1.1のUTF-7エンコーディング |
char8_t、char16_t、char32_tのリテラルはそれぞれUTF-8、UTF-16、UTF-32であることが規格で保証されているが、text_encodingクラスはこれらのワイド・Unicode文字型のエンコーディングは扱わず、通常のcharのエンコーディングのみを対象とする。
日本語関連の列挙子
| 列挙子 | 値 | IANA名 | 説明 |
|---|---|---|---|
HalfWidthKatakana |
15 | JIS_X0201 | 半角カタカナ(JIS X 0201) |
JISEncoding |
16 | JIS_Encoding | JISエンコーディング |
ShiftJIS |
17 | Shift_JIS | Shift_JIS。IANAの定義に基づく |
EUCPkdFmtJapanese |
18 | EUC-JP | 日本語EUC(パック形式) |
EUCFixWidJapanese |
19 | Extended_UNIX_Code_Fixed_Width_for_Japanese | 日本語EUC(固定幅) |
ISO2022JP |
39 | ISO-2022-JP | ISO-2022-JP |
ISO2022JP2 |
40 | ISO-2022-JP-2 | ISO-2022-JP-2 |
Windows31J |
2024 | Windows-31J | Windows-31J(CP932)。ShiftJISとは異なるエンコーディングであり、NEC特殊文字やIBM拡張文字を含む |
ShiftJIS(MIB 17)とWindows31J(MIB 2024)はIANAでは別のエンコーディングとして登録されている。日本語WindowsでMSVCがデフォルトで使用するのはWindows31J(CP932)であり、厳密なShift_JISとは異なる。
列挙子名の由来
各列挙子名は、対応するIANAエイリアスのうちcs(charset)で始まるものからcsプレフィックスを除去して作成されている。
例外として:
csUnicodeはUCS2にマッピングされているcsIBM904のような明らかなタイポはIBM904に修正されている
除外されたエンコーディング
以下の登録済みエンコーディングは、comp-nameアルゴリズムにおいてエイリアスが他のエンコーディングと衝突するため、text_encoding::idから除外されている:
- NATS-DANO (MIB 33)
- NATS-DANO-ADD (MIB 34)
例
#include <text_encoding>
#include <print>
int main() {
// using enum idにより直接アクセス可能
std::text_encoding enc{std::text_encoding::UTF8};
std::println("UTF-8 MIB: {}", static_cast<int>(std::text_encoding::UTF8));
// 日本語エンコーディングの確認
std::text_encoding sjis{std::text_encoding::ShiftJIS};
std::println("Shift_JIS name: {}", sjis.name());
std::println("Shift_JIS MIB: {}", static_cast<int>(sjis.mib()));
// リテラルエンコーディングとの比較
if constexpr (std::text_encoding::literal() == std::text_encoding::UTF8) {
std::println("Compiling with UTF-8 literals");
}
}
出力例
UTF-8 MIB: 106
Shift_JIS name: Shift_JIS
Shift_JIS MIB: 17
Compiling with UTF-8 literals
バージョン
言語
- C++26
処理系
- Clang: ??
- GCC: 15 ✅
- Visual C++: ??