ICU可以直接在大端机器上对UTF-16LE数据进行排序比较吗?
Can ICU perform collation comparisons on UTF-16LE data on big endian machines directly?
我有以下代码:
UCharIterator iter1;
UCharIterator iter2;
UErrorCode status = U_ZERO_ERROR;
if (ENC_UTF16_BE == m_encoding)
{
uiter_setUTF16BE(&iter1, reinterpret_cast<const char*>(in_string1), in_length1);
uiter_setUTF16BE(&iter2, reinterpret_cast<const char*>(in_string2), in_length2);
return ucol_strcollIter(m_collator, &iter1, &iter2, &status);
}
else if (ENC_UTF8 == m_encoding)
{
uiter_setUTF8(&iter1, reinterpret_cast<const char*>(in_string1), in_length1);
uiter_setUTF8(&iter2, reinterpret_cast<const char*>(in_string2), in_length2);
return ucol_strcollIter(m_collator, &iter1, &iter2, &status);
}
else
{
UnicodeString s1(reinterpret_cast<const char*>(in_string1), in_length1);
UnicodeString s2(reinterpret_cast<const char*>(in_string2), in_length2);
return ucol_strcoll(m_collator, s1.getBuffer(), s1.length(), s2.getBuffer(), s2.length());
}
现在,它遵循数据编码匹配ICU内部编码的"快乐路径",在小端系统上,它是UTF16-LE。
但是,如果这是在大端系统上编译的,并且编码是UTF16-LE,我们将被迫转到'一般'情况,这涉及到创建一个UnicodeString对象,以及隐含的转换。
似乎应该有一个uiter_setUTF16LE函数在这种情况下,但没有?这是过去ICU内部一直使用UTF16-LE的产物吗?是否有另一种方式做到这一点,或者我被迫复制/转换?
看起来我可以实现我自己的UCharIterator的'子类'来做到这一点。似乎很不幸,我需要为一些看起来相对常见的情况做这个。
相关文章:
- 防止主数据类型C++的隐式转换
- HEX值到wchar_t字符(UTF-8)的转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- QTcpServer/QTcpSocket:使用 QDataStream 与直接发送 UTF-8 数据
- 使用 std::locale 格式化法语数字时无效的 UTF-8 数据
- 如何在C++中读取 UTF-8 文件数据
- UTF-16LE 编码问题与 Qt 文本编辑器用 C++ 编写
- "iconv"从 UTF-32LE 转换为 UTF-16LE
- Windows的unicode数据类型使用什么unicode编码(UTF-8、UTF-16等)
- 使用C API插入OpenDAP中的UTF-8数据
- 如何获得以字节为单位的UTF-16LE字符串的大小
- 我应该使用UTF-8通过网络发送数据吗
- 在 Mac 中使用C++读取 UTF-8 数据不起作用
- 跨平台UTF-8字符文件数据编码/解码
- 如何使用Visual C++将UTF-8编码的数据存储到sqlite3中
- 用c++处理来自MySQL的utf-8数据并返回结果
- 如何将ASCII保存为C/ c++ (cpp)中的Unicode (UTF-16LE)
- ICU可以直接在大端机器上对UTF-16LE数据进行排序比较吗?