如果想采用类似ispunct函数的方式找出UTF-8字符串中全部的标点(包括中英文标点)可以参考以下方法:先将UTF8 string转为wchar_t字符类型的wstring。这个可以借助第三方库、系统API(例如windows的MultiByteToWideChar)、C++11的<codecvt>等。之后用<locale>库的ispunct模板函数来识别标点符号。这个函数用法和C版本的ispunct差不多,只是多了字符类型模板参数和一个本地环境locale参数,因此可以根据locale判断出英文字符以外的符号。在中文系统语言的windows下一般不显式设置locale就可以工作:
而linux环境下如果要识别英文以外的标点可能需要指定locale:由于各系统平台下locale配置都不同(有些环境下甚至没有可用的locale),所以如果对移植兼容性要求比较高的话,建议还是采用先转为UTF-16/UTF-32再正则表达式过滤的手段。