我得到一个字符串和编码字符集,比如 iso_8859-1
、utf-8
等。我需要扫描字符串并将其标记为单词,因为我会使用 isspace()
和 ispunc()
。
是否有考虑字符集的字符测试函数?另外,是否有推进正确字节数的迭代器?
注意:
我知道我可以将字符串转换为 utf8,然后使用 Glib::ustring
及其工具。我想知道我是否可以避免这种情况。
最佳答案
如果您想不惜一切代价避免转换,则必须编写一堆不同的例程:
static void handle_iso_8859_1(const char *);
static void handle_iso_8859_15(const char *);
static void handle_utf_8(const char *);
static void handle_string(const char *s, const char *encoding) {
if (strcmp(encoding, "ISO-8859-1") == 0) {
handle_iso_8859_1(s);
} else if (strcmp(encoding, "ISO-8859-15") == 0) {
handle_iso_8859_15(s);
} else if (strcmp(encoding, "UTF-8") == 0) {
handle_utf_8(s);
} else {
error("unknown encoding: %s", encoding);
}
}
为什么首先要避免转换?是不是太贵了?真的太贵了吗?从 ISO-8859-1 转换为 UTF-8 非常便宜且容易做到。嗯,也许你需要一个额外的内存分配和一些字节的复制。但这真的值得将几乎相同的代码编写三次(或更多次)吗?
关于c++ - 字符集感知测试,如 isalpha() 等和迭代器 - 有这样的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3344833/