最終更新日時(UTC):
が更新

履歴 編集

enum
<text_encoding>

std::text_encoding::id(C++26)

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_tchar16_tchar32_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プレフィックスを除去して作成されている。

例外として:

  • csUnicodeUCS2にマッピングされている
  • 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

処理系

参照