我得到一个字符串和编码字符集,如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/