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

10-11 22:59
查看更多