Кодировка набора символов Visual Studio - PullRequest
0 голосов
/ 13 июня 2019

Когда мы работаем с кодированием последовательности символов, у нас есть различные типы стандартов кодирования, такие как стандарты однобайтового кодирования (ASCII и Extended ASCII), стандарты многобайтового кодирования (Shift-JIS, Unicode 16 и ...), а также Unicode 32 стандарта, которые являются выдающимися в современном программировании и разработке программного обеспечения, но в среде Visual Studio у нас есть только многобайтовое кодирование и Unicode.

Мой вопрос: как мне работать со стандартами кодирования переменной длины в среде Visual Studio? Поддерживает ли он эти типы стандартов кодирования? Если да, как я могу использовать это в визуальной студии или даже в другой среде для целей обучения? Например, как мы можем использовать кодирование UCS 2 или UTF16 в среде Microsoft Visual Studio для разработки на C ++?

1 Ответ

1 голос
/ 14 июня 2019

Visual Studio C ++, поддерживает:


Строки:

  • string: тип, описывающий специализацию класса шаблона basic_string с элементами типаchar
  • u16string: тип, описывающий специализацию шаблона класса basic_string с элементами типа char16_t.
  • u32string: тип, описывающий специализациюкласса шаблона basic_string с элементами типа char32_t.
  • wstring: тип, описывающий специализацию класса шаблона basic_string с элементами типа wchar_t.

https://docs.microsoft.com/en-us/cpp/standard-library/string-typedefs?view=vs-2019


Литералы символов

  • Обычные литералы типа char, например 'a'
  • UTF-8 символьных литералов типа char, например u8'a'
  • Широкие символьные литералы типа wchar_t, например L'a'
  • UTF-16 символьные литералы типа char16_t, например u'a'
  • UTF-32 символьных литералов типа char32_t, например U'a'

https://docs.microsoft.com/en-us/cpp/cpp/string-and-character-literals-cpp?view=vs-2019#character-literals


Кодировка:

  • Символьный литерал без префикса является обычным символьным литералом.Значение обычного символьного литерала, содержащего один символ, escape-последовательность или универсальное имя символа, которое может быть представлено в наборе символов выполнения, имеет значение, равное числовому значению его кодировки в наборе символов выполнения.Обычный символьный литерал, который содержит более одного символа, escape-последовательность или универсальное имя символа, является литералом из нескольких символов.Литерал из нескольких символов или обычный символьный литерал, который не может быть представлен в наборе символов выполнения, поддерживается условно, имеет тип int и его значение определяется реализацией.

  • Символлитерал, который начинается с префикса L, является литералом широкого символа.Значение литерала широких символов, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное числовому значению его кодировки в наборе широких символов выполнения, если символьный литерал не имеет представления в широкоформатном исполнении.набор символов, в этом случае значение определяется реализацией.Значение литерала широких символов, содержащего несколько символов, escape-последовательности или имена универсальных символов, определяется реализацией.

  • Символьный литерал, который начинается с префикса u8, представляет собой UTF-8буквальный характер.Значение символьного литерала UTF-8, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное значению его кодовой точки ISO 10646, если оно может быть представлено одной кодовой единицей UTF-8 (соответствующей C0Блок управления и базовый латинский Unicode блок).Если значение не может быть представлено одной кодовой единицей UTF-8, программа некорректна.Символьный литерал UTF-8, содержащий более одного символа, escape-последовательность или универсальное имя символа, имеет неправильную форму.

  • Символьный литерал, который начинается с префикса u, представляет собой UTF-16буквальный характер.Значение символьного литерала UTF-16, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное значению его кодовой точки ISO 10646, если оно может быть представлено одной единицей кода UTF-16 (соответствующеймногоязычная плоскость).Если значение не может быть представлено одной кодовой единицей UTF-16, программа некорректна.Символьный литерал UTF-16, содержащий более одного символа, escape-последовательность или универсальное имя символа, имеет неправильный формат.

  • Символьный литерал, который начинается с префикса U, является символьным литералом UTF-32.Значение символьного литерала UTF-32, содержащего один символ, escape-последовательность или универсальное имя символа, имеет значение, равное значению его кодовой точки ISO 10646.Символьный литерал UTF-8, содержащий более одного символа, escape-последовательность или универсальное имя символа, имеет неправильную форму.

https://docs.microsoft.com/en-us/cpp/cpp/string-and-character-literals-cpp?view=vs-2019#encoding


#include <string>
using namespace std::string_literals; // enables s-suffix for std::string literals

int main()
{
    // Character literals
    auto c0 =   'A'; // char
    auto c1 = u8'A'; // char
    auto c2 =  L'A'; // wchar_t
    auto c3 =  u'A'; // char16_t
    auto c4 =  U'A'; // char32_t

    // String literals
    auto s0 =   "hello"; // const char*
    auto s1 = u8"hello"; // const char*, encoded as UTF-8
    auto s2 =  L"hello"; // const wchar_t*
    auto s3 =  u"hello"; // const char16_t*, encoded as UTF-16
    auto s4 =  U"hello"; // const char32_t*, encoded as UTF-32

    // Raw string literals containing unescaped \ and "
    auto R0 =   R"("Hello \ world")"; // const char*
    auto R1 = u8R"("Hello \ world")"; // const char*, encoded as UTF-8
    auto R2 =  LR"("Hello \ world")"; // const wchar_t*
    auto R3 =  uR"("Hello \ world")"; // const char16_t*, encoded as UTF-16
    auto R4 =  UR"("Hello \ world")"; // const char32_t*, encoded as UTF-32

    // Combining string literals with standard s-suffix
    auto S0 =   "hello"s; // std::string
    auto S1 = u8"hello"s; // std::string
    auto S2 =  L"hello"s; // std::wstring
    auto S3 =  u"hello"s; // std::u16string
    auto S4 =  U"hello"s; // std::u32string

    // Combining raw string literals with standard s-suffix
    auto S5 =   R"("Hello \ world")"s; // std::string from a raw const char*
    auto S6 = u8R"("Hello \ world")"s; // std::string from a raw const char*, encoded as UTF-8
    auto S7 =  LR"("Hello \ world")"s; // std::wstring from a raw const wchar_t*
    auto S8 =  uR"("Hello \ world")"s; // std::u16string from a raw const char16_t*, encoded as UTF-16
    auto S9 =  UR"("Hello \ world")"s; // std::u32string from a raw const char32_t*, encoded as UTF-32
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...