Visual Studio 的字符集编码
Character Set Encoding of Visual Studio
当我们使用字符序列编码时,我们有不同类型的编码标准,如单字节编码标准(ASCII和扩展ASCII),多字节编码标准(Shift-JIS,Unicode 16和...)以及Unicode 32标准,它在今天的编程和软件开发中很突出,但在Visual Studio环境中,我们只有多字节编码和Unicode。
我的问题是:我应该如何在Visual Studio环境中使用可变长度编码标准?它是否支持这些类型的编码标准?如果是,我如何在视觉工作室甚至其他环境中使用它来实现学习目标?例如,我们如何在Microsoft Visual Studio环境中使用UCS 2或UTF16编码进行C++开发?
Visual Studio C++,支持:
>字符串:string
:描述具有类型char
元素的模板类basic_string
的专用化的类型u16string
:描述具有类型为char16_t
的元素的模板类basic_string
专用化的类型。u32string
:描述具有类型为char32_t
的元素的模板类basic_string
专用化的类型。wstring
:描述具有类型为wchar_t
的元素的模板类basic_string
专用化的类型。
https://learn.microsoft.com/en-us/cpp/standard-library/string-typedefs?view=vs-2019
字符文字
- 类型为
char
的普通字符文字,例如'a'
- 类型
char
的 UTF-8 字符文本,例如u8'a'
- 类型
wchar_t
的宽字符文本,例如L'a'
- 类型的 UTF-16 字符文字
char16_t
,例如u'a'
- UTF-32 字符文字类型为
char32_t
,例如U'a'
https://learn.microsoft.com/en-us/cpp/cpp/string-and-character-literals-cpp?view=vs-2019#character-literals
<小时 />编码:
没有前缀的字符文本是普通字符文本。包含可在执行字符集中表示的单个字符、转义序列或通用字符名称的普通字符文本的值的值等于其在执行字符集中的编码数值。包含多个字符、转义序列或通用字符名称的普通字符文本是多字符文本。无法在执行字符集中表示的多字符文本或普通字符文本受条件支持,具有 int 类型,并且其值由实现定义。
以
L
前缀开头的字符文本是宽字符文本。包含单个字符、转义序列或通用字符名称的宽字符文本的值的值等于其在执行宽字符集中的编码的数值,除非字符文本在执行宽字符集中没有表示形式,在这种情况下,该值是实现定义的。包含多个字符、转义序列或通用字符名称的宽字符文本的值是实现定义的。以
u8
前缀开头的字符文本是UTF-8 字符文本。如果包含单个字符、转义序列或通用字符名称的 UTF-8 字符文本的值可以由单个 UTF-8 代码单元(对应于 C0 控件和基本拉丁语 Unicode 块)表示,则该值的值等于其 ISO 10646 码位值。如果该值不能由单个 UTF-8 代码单元表示,则程序格式不正确。包含多个字符、转义序列或通用字符名称的 UTF-8 字符文本格式不正确。以
u
前缀开头的字符文本是UTF-16 字符文本。包含单个字符、转义序列或通用字符名称的 UTF-16 字符文本的值的值等于其 ISO 10646 码位值(如果可以用单个 UTF-16 码单元(对应于基本多语言平面)表示。如果该值不能由单个 UTF-16 代码单元表示,则程序格式不正确。包含多个字符、转义序列或通用字符名称的 UTF-16 字符文本格式不正确。以
U
前缀开头的字符文本是UTF-32 字符文本。包含单个字符、转义序列或通用字符名称的 UTF-32 字符文本的值等于其 ISO 10646 码位值。包含多个字符、转义序列或通用字符名称的 UTF-8 字符文本格式不正确。
https://learn.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
}
- 如何确定我已使用非编码文件到达 EOF?
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 在卡萨布兰卡形成编码参数的列表
- 使用C++进行游程编码
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- 使用已使用 java 编码的 openssl 解码数据
- boost 是否有按特殊类型值编码状态"compact optional"?
- 如何在CPP的给定目录中列出UTF编码的文件名?
- 如何使用 C++将 ISO-2022-KR 编码转换为 UTF-8 编码?
- 绝对编码器十六进制输入
- 防止C++中的硬编码数字
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 使用文件内容作为硬编码字符串
- 运行长度编码程序 c++ 的问题
- 以C++为单位进行运行长度编码
- *新的编码器*格式和运算符
- Visual Studio 的字符集编码
- 什么是执行范围内的字符集及其编码
- C标准:字符集和字符串编码规范
- Boost:如何检查文本文件字符编码/字符集