c++ - 字符集感知测试,如 isalpha() 等和迭代器 - 有这样的东西吗?

标签 c++ character-encoding

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

相关文章:

c++ - 指向用数组初始化的矩阵的指针数组

c++ - <RInside.h> 的 fatal error

java - 我的简单 Java HTTPServer 中的特殊字符编码

delphi - TWebBrowser 的 HTML 源代码 - 如何检测流编码?

c++ - 智能指针实现的隐式转换

c++ - glibcxx STL 在其 std::valarray::sum() 的实现中是否不正确?

c++ - 尝试使用 clang 编译时出错

mysql - 数据库字符集、表字符集和列字符集之间的关系?不同的字符集是否会导致任何性能问题?

javascript - jQuery .load 导入特殊字符

html - 如何防止浏览器将 ß 更改为 ss?