c - 如何正确计算 C 中的 æ ø å(Unicode 作为 UTF-8)字符?

标签 c unicode character counting

我正在编写一个简单的程序来计算我放入链表中的文本文件 (UTF-8) 中的字符数。一切似乎都运行良好,除了它为每个实例计算两次 æ ø å(挪威字母表中的最后三个字符)。所以如果字符串是 æøå,我得到 6 而不是 3。如何解决这个问题?

int length()
{
  pointer = root; // Reset pointer
  int i; // Looping through data in node 
  int len = 0; // Counting characters
  int sizedata = sizeof(pointer->data); // Sets size limit for data in node

  while(pointer != NULL)
    {
      for(i = 0; i < sizedata; i++) // Looping through data in node
    {
      if(pointer->data[i] == '\0') break; // Stops count on end of string
      len++; // Counting characters
    }
      pointer = pointer->next; // Linking to next node
    }
  printf("Length of text is: %d characters\n", len);
}

最佳答案

我根据这个改了代码site .对于 len++ 之前的 if 语句,一切都是一样的;

int length()
{
    pointer = root; // Reset pointer
    int i; // Looping through data in node 
    int len = 0; // Counting characters
    int sizedata = sizeof(pointer->data); // Sets size limit for data in node

    while(pointer != NULL)
    {
        for(i = 0; i < sizedata; i++) // Looping through data in node
        {
            if(pointer->data[i] == '\0') break; // Stops count on end of string
            if ((pointer->data[i] & 0xC0) != 0x80)  //count characters
                len++;
        }
        pointer = pointer->next; // Linking to next node
    }
    printf("Length of text is: %d characters\n", len);
}

注意(感谢@Eljay): 这是在计算 Unicode 代码点(以 UTF-8 编码),而不是字符(字形)。一些字符由多个代码点组成。例如,对于 x 和两个组合代码点,x̝̌ 是 78 cc 9d cc 8c。此例程会将 1 个字符计为 3(代码点)的长度。

关于c - 如何正确计算 C 中的 æ ø å(Unicode 作为 UTF-8)字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25803627/

相关文章:

java - 字符和数字交替出现的字符串

c - 使用链表实现社区云

python - C和python之间的RSA加密/解密

c - 无限循环中的内存泄漏

Python - 在 HTTP POST 请求中发送 unicode 字符(以\u 为前缀)

c++ - "cout"无法使用汉字

c - 如何在for循环中使用数组,以及如何检查通过计算得出的值是否为整数?

java - 字符显示/搜索 Unicode 字符

java - 在 JavaScript 中将十六进制数转换为其等效的 emosy Unicode 字符

regex - 使用正则表达式查找并替换 DNA 序列,但仅限每 3 个字符