小敘背景
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拯救一下。