我有一个以 null 结尾的 const char*
形式给出的 UTF-8 字符串。我想知道这个字符串的第一个字母本身是否是一个a
。以下代码
bool f(const char* s) {
return s[0] == 'a';
}
是错误的,因为字符串的第一个字母(字素簇)可能是 à
- 由 2 个 unicode 标量值组成:a
和 `
。所以这个非常简单的问题似乎很难回答,除非你知道字素簇是如何形成的。
尽管如此,许多库都会解析 UTF-8 文件(例如 YAML 文件),因此应该能够回答此类问题。但是这些库似乎并不依赖于 Unicode 库。
所以我的问题是:
如何编写代码来检查字符串是否以字母
a
开头?假设第一个问题没有简单的答案,解析器(例如 YAML 解析器)如何在无法回答此类问题的情况下解析文件?
最佳答案
根本没关系。
考虑:这个字符串是有效的 JSON 吗?
"̀"
(这是字节序列22 cc 80 22
。)
你似乎在争论它不是:因为 JSON 字符串应该以 "
(QUOTATION MARK) 开头,但它以 "̀
(QUOTATION MARK +结合重音)。
唯一合理的回答是您在错误的层次上思考:文本序列化是根据代码点定义的。字素簇仅用于处理自然语言和编辑文本。
这当然被认为是有效的 JSON。
>>> json.loads(bytes.fromhex('22cc8022'))
'̀'
关于c - 如何检查 UTF-8 字符串是否以 'a' 开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44638508/