**Use case**
Text preprocessing and matching inside ClickHouse.

**Describe the solution you'd like**
Wrap functions from `icu` library. The functions should work on UTF-8 data.

**Additional context**
See also a sibling task: #17182.

{
#define M(VALUE, NAME) names[VALUE] = std::string_view(#NAME);
            APPLY_FOR_ERROR_CODES(M)
#undef M
        }
    } error_codes_names;
    std::string_view getName(ErrorCode error_code)
    {
        if (error_code < 0 || error_code >= END)
            return std::string_view();
        return error_codes_names.names[error_code];
    }
    ErrorCode getErrorCodeByName(std::string_view error_name)
    {
        for (size_t i = 0, end = ErrorCodes::end(); i < end; ++i)
        {
            std::string_view name = ErrorCodes::getName(i);
            if (name.empty())
                continue;
            if (name == error_name)
                return i;
        }
        throw Exception(NO_SUCH_ERROR_CODE, "No error code with name: '{}'", error_name);
    }
    ErrorCode end() { return END + 1; }