Unicode libpcre2代码单位宽度
我一直在查看Unicode libpcre2代码单位宽度,unicode,utf-8,pcre,Unicode,Utf 8,Pcre,我一直在查看pcre2的手册页,并试图准确地找出哪些情况需要pcre2\u code\u UNIT\u WIDTH的哪些定义 PCRE2的源代码可以编译为支持8位、16位或 32位代码单元,这意味着最多可以使用三个独立的库 安装 问题1:PCRE2的代码单位到底是什么?这是否意味着我需要使用PCRE2\u code\u UNIT\u WIDTH 8来处理char*而不是PCRE2\u code\u UNIT\u WIDTH 32来处理wchar*?如果我的平台的wchar是16位怎么办?这是否需
pcre2
的手册页,并试图准确地找出哪些情况需要pcre2\u code\u UNIT\u WIDTH
的哪些定义
PCRE2的源代码可以编译为支持8位、16位或
32位代码单元,这意味着最多可以使用三个独立的库
安装
问题1:PCRE2的代码单位到底是什么?这是否意味着我需要使用PCRE2\u code\u UNIT\u WIDTH 8
来处理char*
而不是PCRE2\u code\u UNIT\u WIDTH 32
来处理wchar*
?如果我的平台的wchar
是16位怎么办?这是否需要有条件地使用PCRE2\u代码\u单位\u宽度16?如果这是真的,似乎根据我的想法,我需要使用PCRE2\u code\u UNIT\u WIDTH=8*\uuuu SIZEOF\u WCHAR\u T\uuu
关于Unicode主题:
在这三种情况下,字符串可以解释为每个代码单元一个字符,也可以解释为UTF编码的Unicode,并支持Unicode常规类别属性。Unicode支持在构建时是可选的(但是是默认的)。但是,必须在运行时显式启用将字符串作为UTF代码单元进行处理
问题2:启用Unicode时,PCRE2编码单位宽度的确切含义是什么?PCRE2\u code\u UNIT\u WIDTH 8
是否接受UTF-8,我需要设置PCRE2\u code\u UNIT\u WIDTH 16
来处理UTF-16字符串
PCRE2的代码单元到底是什么
以下是PCRE2用于其代码单元定义的内容(在PCRE2.h
中):
/*模式和主题字符串中代码单元的类型*/
类型def uint8_t PCRE2_UCHAR8;
类型定义uint16\u t PCRE2\u UCHAR16;
类型定义uint32\u t PCRE2\u UCHAR32;
类型定义常量PCRE2_UCHAR8*PCRE2_SPTR8;
类型定义常量PCRE2_UCHAR16*PCRE2_SPTR16;
类型定义常量PCRE2_UCHAR32*PCRE2_SPTR32;
因此,您可以看到PCRE2在发动机罩下使用uintX\u t
,而不是char
/wchar\u t
请注意,当您将PCRE2\u code\u UNIT\u WIDTH
定义为8、16或32时,PCRE2\u UCHAR
和PCRE2\u SPTR
将被定义为正确的变量
因此,是的,PCRE2\u code\u UNIT\u WIDTH=8*\u大小的WCHAR\u T\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。如果您想编写可移植代码,请避免使用它,UTF-8只需使用char
/uint8\u t
,UTF-16只需使用uint16\u t
,UTF-32只需使用uint32\u t
不要将代码单元与代码点混淆,因为编码单个代码点可能需要几个代码单元
启用Unicode时,PCRE2\u code\u UNIT\u WIDTH
的确切含义是什么?PCRE2\u code\u UNIT\u WIDTH 8
是否接受UTF-8,我需要设置PCRE2\u code\u UNIT\u WIDTH 16
来处理UTF-16字符串
对。如果需要在程序中处理多个编码,还可以将PCRE2\u code\u UNIT\u WIDTH
设置为0。您将丢失别名,例如pcre2\u match
,您必须调用pcre2\u match\u 8
或pcre2\u match\u 16