對(duì)接后臺(tái)的一個(gè)接口拂封,返回的數(shù)據(jù)中有一段類(lèi)似于這種“北京丨海淀”,然后我只想要“北京”這個(gè)詞
于是前端js隨手寫(xiě)下'北京丨海淀'.split('|')[0]却音,結(jié)果沒(méi)取到
當(dāng)時(shí)愣了下楞抡,不過(guò)沒(méi)在意,換另外一個(gè)方法繼續(xù)試理张,還是不行赫蛇,這個(gè)時(shí)候就有點(diǎn)懵逼了
于是再換方法繼續(xù)試,把所有的方法全都試了一遍全都不行雾叭,這個(gè)時(shí)候就有點(diǎn)慌了悟耘,局面好像有點(diǎn)控制不住了
把所有的原因都考慮了一遍,甚至換了瀏覽器和電腦织狐,試了很長(zhǎng)時(shí)間都不行
最后終于將目光放到了“丨”這個(gè)字符上暂幼,復(fù)制粘貼然后打印其unicode編碼
發(fā)現(xiàn)這個(gè)東西根本不是英文編碼狀態(tài)下的豎線|,而是一個(gè)拼音為gun的漢字丨
找出了原因后赚瘦,當(dāng)時(shí)心情很平靜粟誓,只不過(guò)是有點(diǎn)想把負(fù)責(zé)此接口的后端拖出來(lái)砍兩刀而已
( ?_?)?⌒●~*
鏈接:https://www.zhihu.com/question/21747929/answer/319675621那么如何得到一個(gè)特殊字符的Unicode碼呢?例如?的Unicode是00bf
首先要了解Unicode和uft-8起意,utf-16的關(guān)系鹰服,明確Unicode是字符集,utf-8是編碼方式揽咕,這個(gè)問(wèn)題中一encode就錯(cuò)了
參考鏈接:https://www.zhihu.com/question/23374078
簡(jiǎn)單來(lái)說(shuō):
Unicode 是「字符集」
UTF-8 是「編碼規(guī)則」
其中:
字符集:為每一個(gè)「字符」分配一個(gè)唯一的 ID(學(xué)名為碼位 / 碼點(diǎn) / Code Point)
編碼規(guī)則:將「碼位」轉(zhuǎn)換為字節(jié)序列的規(guī)則(編碼/解碼 可以理解為 加密/解密 的過(guò)程)
廣義的 Unicode 是一個(gè)標(biāo)準(zhǔn)悲酷,定義了一個(gè)字符集以及一系列的編碼規(guī)則,即 Unicode 字符集和 UTF-8亲善、UTF-16设易、UTF-32 等等編碼……
Unicode 字符集為每一個(gè)字符分配一個(gè)碼位,例如「知」的碼位是 30693蛹头,記作 U+77E5(30693 的十六進(jìn)制為 0x77E5)顿肺。
UTF-8 顧名思義,是一套以 8 位為一個(gè)編碼單位的可變長(zhǎng)編碼渣蜗。會(huì)將一個(gè)碼位編碼為 1 到 4 個(gè)字節(jié):
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
根據(jù)上表中的編碼規(guī)則屠尊,之前的「知」字的碼位 U+77E5 屬于第三行的范圍:
7 7 E 5
0111 0111 1110 0101 二進(jìn)制的 77E5
0111 011111 100101 二進(jìn)制的 77E5
1110XXXX 10XXXXXX 10XXXXXX 模版(上表第三行)
11100111 10011111 10100101 代入模版
E 7 9 F A 5
這就是將 U+77E5 按照 UTF-8 編碼為字節(jié)序列 E79FA5 的過(guò)程。反之亦然耕拷。得到一個(gè)特殊字符的Unicode碼的方法有很多種
- Java中char的編碼方式本來(lái)就是Unicode讼昆,占兩個(gè)字節(jié)
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
- Python2中用u來(lái)指定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'
?
- Vim作為專(zhuān)門(mén)給程序員用的editor,用一個(gè)簡(jiǎn)單的操作符ga就可以了
i<C-v>u00bf 就可以打印出一個(gè)?
將光標(biāo)移動(dòng)到特殊字符上<ESC>ga
<?> 191, Hex 00bf, Octal 277