加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何检查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开头的代码?
>假设第一个问题没有简单的答案,解析器(如YAML解析器)如何设法解析文件而不能回答这类问题?

解决方法

这没关系.

考虑一下:这个字符串是否有效JSON?

"?"

(那是字节序列22 cc 80 22.)

你似乎在争论它不是:因为JSON字符串应该以“(QUOTATION MARK)开头,而是以”(QUOTATION MARK COMBINING GRAVE ACCENT)开头.

唯一合理的反应是您正在考虑错误的级别:文本序列化是根据代码点定义的. Grapheme集群仅用于处理自然语言和编辑文本.

这当然被认为是有效的JSON.

>>> json.loads(bytes.fromhex('22cc8022'))
'?'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读