美文网首页
得到一个特殊字符的Unicode码

得到一个特殊字符的Unicode码

作者: shuff1e | 来源:发表于2018-03-08 00:00 被阅读30次
    • 对接后台的一个接口,返回的数据中有一段类似于这种“北京丨海淀”,然后我只想要“北京”这个词
      于是前端js随手写下'北京丨海淀'.split('|')[0],结果没取到
      当时愣了下,不过没在意,换另外一个方法继续试,还是不行,这个时候就有点懵逼了
      于是再换方法继续试,把所有的方法全都试了一遍全都不行,这个时候就有点慌了,局面好像有点控制不住了
      把所有的原因都考虑了一遍,甚至换了浏览器和电脑,试了很长时间都不行
      最后终于将目光放到了“丨”这个字符上,复制粘贴然后打印其unicode编码
      发现这个东西根本不是英文编码状态下的竖线|,而是一个拼音为gun的汉字丨
      找出了原因后,当时心情很平静,只不过是有点想把负责此接口的后端拖出来砍两刀而已
      ( ・_・)ノ⌒●~*
      链接:https://www.zhihu.com/question/21747929/answer/319675621

    • 那么如何得到一个特殊字符的Unicode码呢?例如¿的Unicode是00bf

    • 首先要了解Unicode和uft-8,utf-16的关系,明确Unicode是字符集,utf-8是编码方式,这个问题中一encode就错了
      参考链接:https://www.zhihu.com/question/23374078
      简单来说:
      Unicode 是「字符集」
      UTF-8 是「编码规则」
      其中:
      字符集:为每一个「字符」分配一个唯一的 ID(学名为码位 / 码点 / Code Point)
      编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)
      广义的 Unicode 是一个标准,定义了一个字符集以及一系列的编码规则,即 Unicode 字符集和 UTF-8、UTF-16、UTF-32 等等编码……
      Unicode 字符集为每一个字符分配一个码位,例如「知」的码位是 30693,记作 U+77E5(30693 的十六进制为 0x77E5)。
      UTF-8 顾名思义,是一套以 8 位为一个编码单位的可变长编码。会将一个码位编码为 1 到 4 个字节:
      U+ 0000 ~ U+ 007F: 0XXXXXXX
      U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
      U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
      U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
      根据上表中的编码规则,之前的「知」字的码位 U+77E5 属于第三行的范围:
      7 7 E 5
      0111 0111 1110 0101 二进制的 77E5
      0111 011111 100101 二进制的 77E5
      1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
      11100111 10011111 10100101 代入模版
      E 7 9 F A 5
      这就是将 U+77E5 按照 UTF-8 编码为字节序列 E79FA5 的过程。反之亦然。

    • 得到一个特殊字符的Unicode码的方法有很多种

    1. Java中char的编码方式本来就是Unicode,占两个字节
    public class Test
    {
        public static void main(String[] args) throws Exception
        {
            int s='¿';
            System.out.println(Integer.toHexString(s));
        }
    }
    
    [root@shuffle-dev py_test]$ java Test
    bf
    
    1. Python2中用u来指定Unicode字符串
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    s=u'¿'
    print s.__repr__()
    print s
    
    [root@shuffle-dev py_test]$ python test.py
    u'\xbf'
    ¿
    
    1. Vim作为专门给程序员用的editor,用一个简单的操作符ga就可以了
    i<C-v>u00bf 就可以打印出一个¿
    将光标移动到特殊字符上<ESC>ga
    <¿> 191, Hex 00bf, Octal 277
    

    相关文章

      网友评论

          本文标题:得到一个特殊字符的Unicode码

          本文链接:https://www.haomeiwen.com/subject/wrqefftx.html