如何在 C 中引用 UTF-16 字符?
How to refer to UTF-16 character in C?
现在我正在为我的库编写一个 C .header 文件,它处理 UTF-16
个字符。
此 .h 应在 MSVC/GCC
中的 Linux/Windows 32/64 bits
上编译。
因为它是一个 lib 头文件,所以我不能坚持使用 C99
及更高版本。所以我不能使用 wchar_t
或 uint16_t
。如何指定 UTF-16
变量?
到目前为止我是这样的:
#if _WIN32
typedef wchar_t char_UTF16;
#else
#if __GNUC__
typedef unsigned short char_UTF16;
#else
#error "Compiler not supported"
#endif
#endif
但我真的不认为这是最好的解决方案。
您可以以与编译器无关的方式尝试一些内置类型:
#include <limits.h>
#include <wchar.h>
#if (WCHAR_MAX==65535) && WCHAR_MIN==0
typedef wchar_t char_UTF16;
#elif USHRT_MAX==65535
typedef unsigned short char_UTF16;
#elif UINT_MAX==65535
typedef unsigned char_UTF16;
#else
# error "Cannot find 16-bit type"
#endif
(尝试 unsigned long
没有意义,因为标准要求它至少为 32 位宽)
...虽然,我不确定您是否应该尝试 wchar_t
,可能我会直接选择数字类型,否则您可能会冒着让客户假设的风险,例如宽字符文字是您的库的 "right" 类型,而实际上它们仅在 Windows.
上
现在我正在为我的库编写一个 C .header 文件,它处理 UTF-16
个字符。
此 .h 应在 MSVC/GCC
中的 Linux/Windows 32/64 bits
上编译。
因为它是一个 lib 头文件,所以我不能坚持使用 C99
及更高版本。所以我不能使用 wchar_t
或 uint16_t
。如何指定 UTF-16
变量?
到目前为止我是这样的:
#if _WIN32
typedef wchar_t char_UTF16;
#else
#if __GNUC__
typedef unsigned short char_UTF16;
#else
#error "Compiler not supported"
#endif
#endif
但我真的不认为这是最好的解决方案。
您可以以与编译器无关的方式尝试一些内置类型:
#include <limits.h>
#include <wchar.h>
#if (WCHAR_MAX==65535) && WCHAR_MIN==0
typedef wchar_t char_UTF16;
#elif USHRT_MAX==65535
typedef unsigned short char_UTF16;
#elif UINT_MAX==65535
typedef unsigned char_UTF16;
#else
# error "Cannot find 16-bit type"
#endif
(尝试 unsigned long
没有意义,因为标准要求它至少为 32 位宽)
...虽然,我不确定您是否应该尝试 wchar_t
,可能我会直接选择数字类型,否则您可能会冒着让客户假设的风险,例如宽字符文字是您的库的 "right" 类型,而实际上它们仅在 Windows.