發表文章

目前顯示的是 6月, 2023的文章

Autocad/ BricsCAD 的 autolisp 支援了 UTF-8

圖片
奇怪的返回值 最近朋友問了一個問題,現在出的 Autocad 使用了 autolisp 的 strlen 函數時,計算中文字數返回的數值怪怪的,怎麼 (strlen "中文") 會返回 2 而不是 4?理論上來說,它是沒有錯,"中文"二字應該是要返回 2 。但是,在以前 autolisp 使用 strlen 計算包含中文字的字元數,是一個中文字等於二個字元。用久了反而在 Autocad 修正(修改)後,造成了一些困擾。由於朋友的客戶開發了很多包含了 (strlen ...) 的程式,如果要一個一個去校正那些程式,讓它執行時像以前那樣,可能要花費很多的時間。這個問題多數在程式對於字碼的轉換上出現,只是 Autocad 的 autolisp 終於也遇上了,雖然大家等了幾十年。 同病相連的伙伴 在 BricsCAD 上它也遇到了相同的問題,因為它一開始就支援了 UTF-8。所以它支援的 autolisp 也是一開始就是 (strlen "中文") => 2 。那為什麼這個 Autocad 的特性竟造成 BricsCAD 的問題呢?因為 BricsCAD 想要贏得 Autocad 客戶的青睞。在這個時期 (2023) ,可以想像這 BricsCAD 不搶 Autocad 的客戶,好像說不過去?如果能夠解決這個中文字元計算數值的問題,這下子不就可以解決 Autocad 和 BricsCAD 選擇方面的自由。朋友表示不能認同 Autocad 原廠停止賣斷及只給使用期租賃的決定,但是除了 BricsCAD 之外其他的 CAD 軟體不給力,那他就失去的選擇的權力。因為新版的 Autocad 不支援,朋友客戶使用的程式只能慢慢的凋零了。 為什麼以前 autolisp  的 (strlen "中文") 返回 4 最直接的想法是, Windows 中控台 (console) 只有支援 ASCII ,而 Windows 繁體中文版等主要作業系統的字元集都是以 Big5 碼為基準。其中 Big5 碼是雙位元組字元集,使用雙八碼儲存方法,以兩位元組安放一字。第一位元組稱為「高位位元組」,第二位元組稱為「低位位元組」。所以在使用 autolisp (strlen "中文")才會返回 4 。而