作为一名Windows程序员,我是一个完全的新手,并且很难用他们所有奇怪的自定义类型阅读Microsoft的文档。
据我所知,我需要使用IsCharUpper
,但我无法找到任何文档告诉我如何使用std::string
(包含utf8文本)并获取TCHAR
代表std::string
的第一个字符。
std::string
是utf8并且标准化其他内容不是一种选择。仅支持某些脚本也不是一种选择。
答案 0 :(得分:2)
TCHAR是Windows API中的别名,它将代表CHAR或WCHAR,具体取决于您是否构建了Unicode应用程序。
MultiByteToWideChar
是您正在寻找的API,它将采用您的utf8输入字符串并填写WCHAR数组。如果您的应用程序是为Unicode构建的,则可以将WCHAR直接传递给IsCharUpper
。如果没有,您可以致电IsCharUpperW
,无论构建配置如何,都会WCHAR
。
这样的事情:
WCHAR out[2]={0};
int written = MultiByteToWideChar(
CP_UTF8, // Your input string is UTF8.
0, // no flags apply
your_string.c_str(), // the std::string you want to test
your_string.length(), // can't pass 1 as the characters are variable size
out, // Put the character here.
1 // we want 1 character converted.
);
bool isUpper = false;
if(written == 1)
isUpper = IsCharUpper(out[0]);
这是我的记忆,当给定一个确切数量的字符时,这个函数不需要写出零终止符,所以这应该有效。
答案 1 :(得分:2)
你可以试试这样的事情
#include <locale>
#include <codecvt>
bool isUpper(const std::string& utf8Str)
{
std::wstring_convert<std::codecvt_utf8<wchar_t>> myconv;
return IsUpperCase(myconv.from_bytes(utf8Str)[0]);
}