如何检查UTF-8字符串是否以’a’开头
发布时间:2020-12-16 10:06:55 所属栏目:百科 来源:网络整理
导读:我有一个UTF-8字符串作为以null结尾的const char *.我想知道这个字符串的第一个字母是否是a本身.以下代码 bool f(const char* s) { return s[0] == 'a';} 是错误的,因为字符串的第一个字母(字形集群)可能是由2个unicode标量值组成的:a和`.所以这个非常简单
我有一个UTF-8字符串作为以null结尾的const char *.我想知道这个字符串的第一个字母是否是a本身.以下代码
bool f(const char* s) { return s[0] == 'a'; } 是错误的,因为字符串的第一个字母(字形集群)可能是由2个unicode标量值组成的:a和`.所以这个非常简单的问题似乎很难回答,除非你知道如何制作字形集群. 尽管如此,许多库解析UTF-8文件(例如YAML文件),因此应该能够回答这类问题.但是这些库似乎并不依赖于Unicode库. 所以我的问题是: >如何编写检查字符串是否以字母a开头的代码? 解决方法
这没关系.
考虑一下:这个字符串是否有效JSON? "?" (那是字节序列22 cc 80 22.) 你似乎在争论它不是:因为JSON字符串应该以“(QUOTATION MARK)开头,而是以”(QUOTATION MARK COMBINING GRAVE ACCENT)开头. 唯一合理的反应是您正在考虑错误的级别:文本序列化是根据代码点定义的. Grapheme集群仅用于处理自然语言和编辑文本. 这当然被认为是有效的JSON. >>> json.loads(bytes.fromhex('22cc8022')) '?' (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |