ICU转换仅在调试模式下正常工作

时间:2013-10-30 16:13:35

标签: c++ visual-studio-2013 icu

我正在使用Visual Studio 2013,我无法弄清楚为什么此功能在调试模式下正常工作,但在发布模式下无效。问题发生在调用ICU成员函数UnicodeString :: extract()的行上。

std::string url_encoder2(const Ustring &code_points) {
    UnicodeString a;
    for (auto &code_point : code_points) a.append(static_cast<UChar32>(code_point));
    std::string result(32, '0');
    UErrorCode status;
    auto conv = ucnv_open("GB2312", &status);
    if (status > U_ZERO_ERROR) throw std::runtime_error("ICU converter error.");
    auto result_length = a.extract(&result[0], result.size(), conv, status); // here lies the problem
    if (status > U_ZERO_ERROR) throw std::runtime_error("ICU converter error.");
    std::stringstream ss;
    for (auto iter = std::begin(result); iter != std::begin(result) + result_length; ++iter) ss << '%' << std::hex << (int)(unsigned char)(*iter);
    return ss.str();
}

我正在使用以下typedef:

typedef char32_t            Uchar;
typedef std::vector<Uchar>  Ustring;

我们非常感谢任何建议,包括那些能够将代码点转换为GB 2312代码页的库。

0 个答案:

没有答案