以下是引用csyx在2022-11-17 18:18:40的发言:
用 vfp 代码实现原生函数 LenC 的 unicode 版,分别用 utf-8 和 utf-16 作为输入参数测试一下,哪种编码格式更有优势?要在 vfp 端处理 unicode 字符,有很大可能需要自己来实现这些功能
实战中,我比较偷懒,一般直接调用C库函数来处理Unicode字符。
至于传递参数,那当然是转为UTF-8更安全、更优胜!
具体到你提及的uniLenC()函数,我查了一下函数库,C实现非常简单,只是一个静态查找表和一个宏:
//-----------------------------
//定义查找表,长度256,表中的数值表示以此为起始字节的utf8字符长度
static uchar utable[] =
{
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1
};
#define Ulength(x) utable[(x)]
//-----------------------------
这个C实现,可直接翻译成VFP原生代码,无任何问题的。
utf-8编码最诱人的好处是:绝不会让你遇上?? —— 但凡用VFP处理过Unicode字符的同学,相信能够明白我说的是什么。只要你传递的参数是utf-8,无论是传入还是传出,都不必担心??问题。