我有以下pcre2
导入,我将其用作占位符/默认值:
/* The PCRE2_CODE_UNIT_WIDTH macro must be defined before including pcre2.h.
For a program that uses only one code unit width, setting it to 8, 16, or 32
makes it possible to use generic function names such as pcre2_compile(). */
#define PCRE2_CODE_UNIT_WIDTH 8
#include <pcre2.h>
在什么情况下代码宽度不是8?例如,对于非asci/utf-8字符,代码宽度应该设置为16还是8?非8位宽度的最常见用法是什么?
1条答案
按热度按时间kmpatx3s1#
以防其他人在这个老问题上寻找答案。
这不是你的模式和/或主题是否包含unicode字符的问题,而是你使用的底层数据类型。你使用的是常规的C字符串(8位char指针)还是类似
wchar_t
或char16_t
的东西?那么你必须使用匹配的PCRE 2代码单元宽度。下面的例子说明了这一点。
char*
和char16_t*
都可以很好地处理相同的模式和包含unicode的主题,但是尝试使用错误的PCRE 2代码单元宽度将导致最坏的分割错误和最好的结果(或者可能更糟,因为您可能没有注意到)。(This代码故意遗漏了一些检查和你可能想做的事情,所以请不要用它作为如何正确使用PCRE 2的例子。