VS下的wchar_t类型编码类型是UTF-8还是UTF-16?

本文详细介绍了在Windows平台下,Microsoft C/C++编译器如何处理Unicode字符,特别是使用UTF-16编码。文章解释了wchar_t类型代表16位Unicode字符,并展示了如何声明Unicode字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KEY: UTF-16.至少在我的Windows平台+vs2008

使用sizeof(WCHAR)已测试就知道了。

引用 9 楼  的回复:
由实现定义:
ISO C++11
2.3/3
...The execution character set and the execution wide-character set are implementation-defined supersets of the basic execution character set and the basic execution wide-ch……

没看懂,不过确定的是微软的编译器是UTF-16
《windows核心编程》
ANSI and Unicode Character and String Data Types
I'm sure you're aware that the C language uses the char data type to represent an 8-bit ANSI character. By default, when you declare a literal string in your source code, the C compiler turns the string's characters into an array of 8-bit char data types:

// An 8-bit character
char c = 'A';

// An array of 99 8-bit characters and an 8-bit terminating zero.
char szBuffer[100] = "A String";

Microsoft's C/C++ compiler defines a built-in data type, wchar_t, which represents a 16-bit Unicode (UTF-16) character. Because earlier versions of Microsoft's compiler did not offer this built-in data type, the compiler defines this data type only when the /Zc:wchar_t compiler switch is specified. By default, when you create a C++ project in Microsoft Visual Studio, this compiler switch is specified. We recommend that you always specify this compiler switch, as it is better to work with Unicode characters by way of the built-in primitive type understood intrinsically by the compiler.

 Note  Prior to the built-in compiler support, a C header file defined a wchar_t data type as follows:

typedef unsigned short wchar_t;

 

Here is how you declare a Unicode character and string:

// A 16-bit character
wchar_t c = L'A';

// An array up to 99 16-bit characters and a 16-bit terminating zero.
wchar_t szBuffer[100] = L"A String";

An uppercase L before a literal string informs the compiler that the string should be compiled as a Unicode string. When the compiler places the string in the program's data section, it encodes each character using UTF16, interspersing zero bytes between every ASCII character in this simple case.

转载于:https://www.cnblogs.com/tupx/p/3469630.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值