关于UTF-8的规则:https://baike.baidu.com/item/UTF-8/481798?fr=aladdin
使用windows系统下的Ubuntu子系统,实现C语言对UTF-8编码格式的文字处理。
#include <stdio.h> // 根据UTF-8的编码格式,打印处文字以及它们相应的编码 // 形参:获取一个无符号字符指针 void PrintUTF8Encoding(unsigned char *str) { unsigned char *chr = str; // 根据UTF-8的规则,一个文字占几个字节可以从首个编码的二进制高位数看出来 // 0代表1个字节,11代表两个字节,以此类推,最多有六个字节 unsigned char bytesArr[] = {0b0, 0b11, 0b111, 0b1111, 0b11111, 0b111111}; int i, j; // bytes存储当前字符的字节数 int bytes; unsigned char *tmp; // C中字符字面量都由' '结尾 while (*chr != ' ') { // 依次循环,确认当前字符有多少个字节 for (i = 6; i > 0; i--) { j = 8 - i; if ((*chr>>j) == bytesArr[i-1]) { bytes = i; break; } } // 循环打印出当前字符的字节 // 注意:多字节必须放在一起打印才能显示出正确的文字 tmp = chr; for (i = 0; i < bytes; i++) { putchar(*tmp); ++tmp; } // 打印出字节的十六进制编码 printf(": "); tmp = chr; for (i = 0; i < bytes; i++) { printf("%x-", *tmp); ++tmp; } printf(" "); // 根据当前字符的字节数,跳过相应个字节 chr += bytes; } } int main() { PrintUTF8Encoding("Hello, world!¡Hast, mañana!你好,世界!よこそ!"); return 0; }
Resistance is Futile!