VBS字元編碼的說明

2021-09-22 09:08:03 字數 850 閱讀 6131

msdn文件對ascw的說明是:ascw是為使用unicode字元的32位平台提供的。它返回unicode(寬型)字元**,因此可以避免從ansi到unicode的**轉換。

按照參考手冊的定義,ascw函式應該返回乙個字元的unicode字元編碼,但是直接拿返回的結果來用的話會有潛在的bug,正如我碰到的。

「魔」字的unicode編碼是39764,測試如下**

c = ascw("魔")

if c > 127 then

wscript.echo "not ascii"

else

wscript.echo "ascii"

end if

你認為返回的結果是什麼?"not ascii"?錯!返回的結果是"ascii"。

這就是潛在的bug,對某些中文(當然還有其他字元)ascw函式返回的值是負數!如果你的**拿這個值與乙個正數比較大小,邏輯值將是false!

為什麼呢?因為ascw的返回值的子型別是integer,而vbs中integer的取值範圍是從-32768到32767。39764 > 32767,造成了溢位,所以返回負數。

怎樣才能得到正確的結果呢?答案把子型別是轉化成long,long的取值範圍是-2,147,483,648到2,147,483,647,不會造成溢位。

wscript.echo clng("&h" & hex(ascw("魔")))
先用hex函式把ascw的返回值轉化成十六進製制的字串,加上vbs中十六進製制字首&h,最後用clng函式把子型別轉化成long。這樣就能得到39764這個正確的unicode編碼值了。

多種字元編碼集的說明

計算機只能識別二進位制資料,早期由來是電訊號。為了方便應用計算機,讓它可以識別各個國家的文字。就將各個國家的文字用數字來表示,並一一對應,形成一張表。這就是編碼表。iso8859 1 拉丁碼表。歐洲碼表 gb2312 中國的中文編碼表。最多兩個位元組編碼所有字元 unicode 國際標準碼,融合了目...

字元編碼簡單說明

編碼可以指定總結 這裡的字元指所有文字 漢字英文日文等 數字 符號 中英等符號 數學符號等 首先資料都是儲存在介質 比如磁碟 上的,然後資料儲存的形式都是位元組形式。位元組是8位元資料,就是有八位二進位制的01序列組合。所有資料都是以01010111這種01序列儲存的。你肯定是在想,只用01就能儲存...

ruby編碼說明

程式編碼一般分幾種情況 1 原始碼檔案編碼 2 接收外部內容的編碼 3 執行環境編碼 4 作業系統編碼 首先原始碼檔案的編碼,可以通過在ruby檔案的頭部新增一行申明即可,這樣所有在原始碼裡面出現的字元都儲存為指定的編碼 coding utf 8 接收的內容或讀取外部檔案時,可能不確定是什麼編碼,這...