C++ 使用Boost.Locale库检索代码点

C++ 使用Boost.Locale库检索代码点,c++,boost,unicode,locale,C++,Boost,Unicode,Locale,从给定的Unicode字符串中,我想检索组成该字符串的字符串列表。为此,我复制了Boost的以下示例: 我了解到,使用中的to_unicode函数可以检索给定字符串的代码点。但我不知道怎么做。我尝试了以下代码,但没有帮助: for (ssegment_index::iterator it = map.begin(), e = map.end(); it != e; ++it) { std::cout << "\"" << * it << "\", ";

从给定的Unicode字符串中,我想检索组成该字符串的字符串列表。为此,我复制了Boost的以下示例:

我了解到,使用中的
to_unicode
函数可以检索给定字符串的代码点。但我不知道怎么做。我尝试了以下代码,但没有帮助:

for (ssegment_index::iterator it = map.begin(), e = map.end(); it != e; ++it) {
    std::cout << "\"" << * it << "\", ";
    boost::locale::util::base_converter encoder_decoder;
    virtual uint32_t test1 = encoder_decoder.to_unicode(it->begin(), it->end() );
}
for(segment_index::iterator it=map.begin(),e=map.end();it!=e;+it){
std::cout begin(),it->end();
}
它返回“类型不匹配”错误。我认为
to_unicode()
函数的参数必须有所不同


我正在考虑只使用Boost来检索代码点,而不是现有的解决方案,例如或,因为Boost提供了许多有用的函数来识别各种语言中的换行符、分词等。

要获取代码点,可以使用
Boost::u8_to_u32_迭代器。这是因为UTF-32字符等于其代码点

#include <boost/regex/pending/unicode_iterator.hpp>
#include <string>
#include <iostream>

void printCodepoints(std::string input) {
    for(boost::u8_to_u32_iterator<std::string::iterator> it(input.begin()), end(input.end()); it!=end; ++it)
        std::cout <<"\""<< * it << "\", ";
}

int main() {
    printCodepoints("Hello World!");
    return 0;
}
#包括
#包括
#包括
无效打印代码点(标准::字符串输入){
对于(boost::u8_to_32_迭代器it(input.begin()),end(input.end());it!=end;++it)
标准::cout
for (ssegment_index::iterator it = map.begin(), e = map.end(); it != e; ++it) {
    std::cout << "\"" << * it << "\", ";
    boost::locale::util::base_converter encoder_decoder;
    virtual uint32_t test1 = encoder_decoder.to_unicode(it->begin(), it->end() );
}
#include <boost/regex/pending/unicode_iterator.hpp>
#include <string>
#include <iostream>

void printCodepoints(std::string input) {
    for(boost::u8_to_u32_iterator<std::string::iterator> it(input.begin()), end(input.end()); it!=end; ++it)
        std::cout <<"\""<< * it << "\", ";
}

int main() {
    printCodepoints("Hello World!");
    return 0;
}