我正在研究字符串编码和语言环境。噢,快乐!
基本上,我想检查UTF-8字符串中的每个字符是否都是图形字符,例如isgraph
,但要检查所有Unicode字符。
这是我到目前为止建立的,但是我不知道如何将其组合在一起。
我相信将UTF-8转换为UTF-32是最通用的解决方案,它看起来像这样:
template<class Facet>
struct deletable_facet : Facet
{
template<class ...Args>
deletable_facet (Args&& ...args) : Facet (std::forward<Args> (args)...) {}
};
std::wstring_convert<deletable_facet<std::codecvt<char32_t, char, std::mbstate_t>>, char32_t> conv32;
std::u32string str32 = conv32.from_bytes (data)
但是isgraph
的示例并没有使我充满信心:
std::locale loc2 ("en_US.UTF-8");
std::isgraph (c, loc2)
文档说字符串参数是“特定于操作系统”的。该示例还建议我需要指定一种语言以及一种编码。
我的字符串可能是英语,法语,日语,等等。
如何确定UTF-8字符串中的字符是任何语言的图形化显示?