【发布时间】:2018-03-31 03:13:53
【问题描述】:
我一直在查看pcre2 的手册页,并试图准确找出哪些情况需要PCRE2_CODE_UNIT_WIDTH 的哪些定义。
PCRE2 的源代码可以编译为支持 8 位、16 位或 32 位代码单元,这意味着最多三个独立的库可以 安装。
问题一:PCRE2的代码单元到底是什么?这是否意味着我需要使用 PCRE2_CODE_UNIT_WIDTH 8 来处理 char* 而不是 PCRE2_CODE_UNIT_WIDTH 32 处理 wchar * ?如果我的平台的wchar 是16 位怎么办?这是否需要有条件地使用PCRE2_CODE_UNIT_WIDTH 16?如果这是真的,似乎根据How big is wchar_t with GCC? 我需要使用PCRE2_CODE_UNIT_WIDTH = 8 * __SIZEOF_WCHAR_T__
关于 Unicode 的话题:
在所有这三种情况下,字符串都可以解释为每个代码单元一个字符,或者解释为 UTF 编码的 Unicode,支持 Unicode 通用类别属性。 Unicode 支持在构建时是可选的(但这是默认设置)。但是,必须在运行时显式启用将字符串作为 UTF 代码单元处理。
问题 2:启用 Unicode 时 PCRE2_CODE_UNIT_WIDTH 究竟是什么意思? PCRE2_CODE_UNIT_WIDTH 8 是否采用 UTF-8,我需要设置 PCRE2_CODE_UNIT_WIDTH 16 来处理 UTF-16 字符串?
【问题讨论】: