UTF-8 和 Unicode,0xC0 和 0x80 是什么意思?

2024-05-04

在过去的几天里,我一直在阅读有关 Unicode 和 UTF-8 的内容,并且经常遇到与此类似的按位比较:

int strlen_utf8(char *s) 
{
  int i = 0, j = 0;
  while (s[i]) 
  {
    if ((s[i] & 0xc0) != 0x80) j++;
    i++;
  }
  return j;
}

有人可以澄清与 0xc0 的比较并检查它是否是最高有效位吗?

谢谢你!

编辑:ANDed,而不是比较,使用了错误的词;)


这不是比较0xc0,这是一个逻辑与运算0xc0.

位掩码0xc0 is 11 00 00 00所以 AND 所做的只是提取前两位:

    ab cd ef gh
AND 11 00 00 00
    -- -- -- --
  = ab 00 00 00

然后将其与0x80(二进制10 00 00 00)。换句话说,if语句正在检查值的前两位是否不等于10.

“为什么?”,我听到你问。嗯,这是个好问题。答案是,在 UTF-8 中,所有以位模式开头的字节10是多字节序列的后续字节:

                    UTF-8
Range              Encoding  Binary value
-----------------  --------  --------------------------
U+000000-U+00007f  0xxxxxxx  0xxxxxxx

U+000080-U+0007ff  110yyyxx  00000yyy xxxxxxxx
                   10xxxxxx

U+000800-U+00ffff  1110yyyy  yyyyyyyy xxxxxxxx
                   10yyyyxx
                   10xxxxxx

U+010000-U+10ffff  11110zzz  000zzzzz yyyyyyyy xxxxxxxx
                   10zzyyyy
                   10yyyyxx
                   10xxxxxx

所以,这个小片段所做的就是遍历 UTF-8 字符串的每个字节,并计算所有不是连续字节的字节(即,它获取字符串的长度,如广告所示)。看这个维基百科链接 http://en.wikipedia.org/wiki/UTF-8欲了解更多详细信息和Joel Spolsky 的优秀文章 http://www.joelonsoftware.com/articles/Unicode.html作为底漆。


顺便说一句有趣的。您可以按如下方式对 UTF-8 流中的字节进行分类:

  • 将高位设置为0,它是一个单字节值。
  • 将两个高位设置为10,它是一个连续字节。
  • 否则,它是多字节序列的第一个字节和前导的数量1位表示该序列总共有多少字节(110...表示两个字节,1110...表示三个字节等)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UTF-8 和 Unicode,0xC0 和 0x80 是什么意思? 的相关文章

  • 电子邮件正则表达式将如何处理新的 unicode 域?

    Since 2009年10月 互联网 名称指定公司和 Numbers ICANN 批准了创建 国家 地区代码顶级域名 ccTLD 在互联网上使用 母语 IDNA 标准 脚本 我很确定大多数网站当前使用的标准正则表达式不会将它们标记为有效 还
  • 处理不兼容的字符编码:UTF-8 和 ASCII-8BIT

    我在生产中遇到不兼容的字符编码错误 我尝试在本地重现它 但没有成功 这是错误消息 A ActionView Template Error occurred in controller name action name incompatibl
  • 在 strings.xml 中使用 Unicode 字符

    我想在字符串中使用以下 unicode 字符 我通过以下方式找到了它的十六进制和十进制代码this http apps timwhitlock info unicode inspect s F0 9F 9A 95 虽然我知道如何在字符串中使
  • JTextPane 的等宽字体/符号

    我想使用 JTextPane 构建类似控制台的输出 因此我使用等宽字体 textpane setFont new Font Font MONOSPACED Font PLAIN 12 这适用于所有类型的字母 如 a z 0 9 等 字符 但
  • 如何区分哪些 unicode 字符是字母(单词)还是标点符号?

    我想检测文本中的单词 即我需要知道给定文本中的哪些字符是字母 即它们可以是 口语 单词的一部分 另一方面 哪些字符是标点符号等 例如 在上面的句子中 我 想要 和 i 和 e 是这方面的单词 而空格 和逗号则不是 这样做的困难在于我希望能够
  • os.path.expanduser("~") 的替代方案?

    在Python 2 7 x中 os path expanduser Unicode 已损坏 这意味着如果 的扩展中包含非 ASCII 字符 则会出现异常 http bugs python org issue13207 http bugs p
  • 闪亮的本地部署错误:输入字符串 1 无效 UTF-8

    我很惊讶地发现一个突然的错误 我的 ShinyApp 停止工作并出现未知错误 提示 输入字符串 1 无效 UTF 8 即使在昨天 该应用程序也可以正常运行 但是突然停止了 下面是我运行时的错误描述runApp gt runApp Liste
  • 如何将UTF-8编码的汉字从MySql正确导出到SQL

    过去三天我们正在与严重的问题作斗争 我们从PhpmyAdmin导出MySql数据库文件 数据库条目中写入的数据是带有UTF 8字符集的中文 导出后将其转换为拉丁字符集 现在我们正在将此数据库SQl文件导入到其他主机 我们在UTF 8和排序规
  • PHP 中的 JS charCodeAt 等效项(具有完整的 unicode 和 emoji 兼容性)

    我在 JS 中有一个简单的代码 如果涉及特殊字符 我无法在 PHP 中复制它 这是 JS 代码 参见JSFiddle https jsfiddle net h8oca3qg 5 用于输出 var str t char t and speci
  • 运行源代码中包含 Unicode 字符的 Python 2.7 代码

    我想运行一个在源代码中包含 unicode utf 8 字符的 Python 源文件 我知道这可以通过添加评论来完成 coding utf 8 在一开始的时候 但是 我希望不使用这种方法来做到这一点 我能想到的一种方法是以转义形式编写 un
  • 如何在 Emacs shell 缓冲区中获得对“✖”等的支持?

    我正在运行一个进程 如果出现错误 则输出字符 如 Unicode 中定义 但是 如果在 Emacs shell 缓冲区 GNU Emacs 的 Aquamacs 发行版 中运行该进程 我根本看不到错误 使用 braeburn aquamac
  • 列表中的“u”是什么意思?

    这是我第一次遇到这种情况 刚刚打印了一个列表 每个元素似乎都有一个u在它前面 即 u hello u hi u hey 它是什么意思 为什么列表的每个元素前面都会有这个 由于我不知道这种情况有多常见 如果您想了解我是如何遇到它的 我会很乐意
  • Enthought - matplotlib(plot()函数的问题)

    我正在尝试使用绘图库 http en wikipedia org wiki Matplotlib在冠层快车上 即使简单的代码也无法运行 注意 系统无法识别plot x 功能 好像有 ASCII X Unicode 的东西 我的计算机使用 U
  • DOMDocument 对我的字符串做了什么?

    dom new DOMDocument 1 0 UTF 8 str p Hello p var dump mb detect encoding str dom gt loadHTML str var dump dom gt saveHTML
  • 标准化 Unicode

    在Python中是否有一种标准方法来规范化unicode字符串 以便它只理解可用于表示它的最简单的unicode实体 我的意思是 可以翻译类似序列的东西 LATIN SMALL LETTER A COMBINING ACUTE ACCENT
  • Scala 中使用转义特殊字符解码字符串问题

    我有一个多行 JSON 文件 其中包含编码为十六进制的特殊字符的记录 以下是单个 JSON 记录的示例 x22value x22 x22 xC4 xB1arines Bint xC4 xB1 xC3 xA7 Ramu xC3 xA7lar
  • 如何转换 UTF-8 <-> UTF16 可移植

    有没有一种简单 可移植的方法 至少是 win32 linux 将 UTF 16 转换为 UTF 8 并返回 最好使用升压 谢谢你的帮助 托比亚斯 Both libiconv http www gnu org software libicon
  • 印地语在 tcpdf 上无法正确显示

    我创建了以下代码 用于在 tcpdf 中使用 arial unicode 字体显示印地文文本 pdf new TCPDF PDF PAGE ORIENTATION PDF UNIT PDF PAGE FORMAT true UTF 8 fa
  • 为什么 OS X 和 Linux 之间的 UTF-8 文本排序顺序不同?

    我有一个包含 UTF 8 编码文本行的文本文件 mac os x cat unsorted txt foo foo 津 如果它有助于重现问题 这里是文件中确切字节的校验和和转储 以及如何自己生成文件 在 Linux 上 使用base64 d
  • TCPDF UTF-8 符号未显示

    我使用最新的 TCPDF 版本 5 9 但在编码方面遇到一些奇怪的问题 我需要立陶宛语语言符号 例如 但只能得到其中的一小部分 其他的还是这样 所以我该怎么做 我使用默认的 times 字体 它带有 TCPDF 下载 任何帮助 将不胜感激

随机推荐