Excel函数——ANSI字符集与Code、Char、Asc函数
小叙背景
Windows系统下,默认的字符集为ANSI,该字符编码方式在不同语言环境下采用不同的编码方案,在中文系统下ANSI编码是GBK。ANSI由ASCII扩展而来,ANSI下无论何种具体的编码方案,其前128个编码均为固定ASCII字符,这128个字符为英文环境下的大小写字母、数字、常用符号与控制符。
Code 与 Char
Code(text) 返回文本字符串中第一个字符的数字代码。
Char(number) 用于返回对应于数字代码的字符。
返回的代码或字符对应于计算机当前使用的字符集(ANSI),在中文环境下即是GBK字符集。这两个函数在ANSI字符集下是可以互相转换的,但是当遇到Unicode字符时就会出现问题。
两个函数的实际意义一般是用作辅助字符串处理,具体啥用处呢?
举个栗子
曾经在QQ上见网友@六号(355832828)@1661907132讨论QQ表情字符是如何被QQ识别的,对此博主进行了分析与解惑。
问题是这样的:
手机QQ复制一个表情,粘贴到别处,你会发现它是“/羊驼”,但是在QQ输入框里敲进“/羊驼”,发现它并不能被QQ识别,发出去的是输入的文字“/羊驼”。
博主认为QQ表情的真实值“/羊驼”(复制的)中应该是有不可见的控制字符的,而这个字符应该是在字符串的首位。
所以手机上用Excel 的Code函数试验了一下,发现它是一个ASCII值为20的控制符,具体是什么字符可以自己去翻ASCII码表。在Excel中用=CHAR(20)&"/羊驼"拼出一个字符串,复制一下在QQ粘贴便是羊驼的表情了。
题外话:
受这个故事的启发,博主对在处理ArcGis标注时字符前的空格会被标注引擎“吃掉”这件事有了这样一个想法——是否可以在标注字符前加入不可见控制符,避免空格被“吃掉”?试验结果是不可以,因为控制字符会显示为“口”。那么,中文下的空格会不会被吃掉呢?测试可行,VBS下表示中文空格用chr(41377)。
再举两个
Case1
如果在Excel中进行了硬换行,先要删除换行符,除了替换框用小键盘Alt+10键入进行替换外,还可以使用=SUBSTITUTE(A3,CHAR(10),"")进行函数处理,这里Char(10)便辅助输入了回车符。
Case2
使用Excel 的SUBSTITUTE函数进行替换操作时,被替换(第2参)与替换为(第3参)的字符串需要使用英文的双引号("")包裹,如果这两个参数就是引号呢?使用Char(34)辅助输入有没有很爽快?
ASC
Asc(text) 对于双字节字符集 (DBCS) 语言(中文就是),该函数将全角(双字节)字符转换成半角(单字节)字符。
实际用处呢就是如下图,有时候一些摸不着头脑的队友录入数据时使用了全角竟不自知,对于他们的数据可以使用asc拯救一下。