- 深入解析ASP核心技術
- 王洪影
- 464字
- 2019-01-03 18:15:50
2.2.2 取得字符串的某種編碼形式
對上例略加修改,得到下例。
getStringGBKFormat.asp
<% text = "今天下雪了。" result = "" '輸出字符長度 response.write "字符長度:" & Len(text) & "<br>" '循環每一個字符 For i=1 To Len(text) oneByte = Mid(text, i,1) '得到一個字符 number = Asc(oneByte) '該字符對應的數字 numberHex = Hex(number) '數字的十六進制形式 '如果十六進制形式只有一位,則前面補一個0 If Len(numberHex) = 1 Then numberHex = "0" & numberHex End If '拼接結果 result = result & " " & numberHex Next response.write result '輸出結果 %>
運行結果如圖2-5所示。

圖2-5 字符串的某種編碼形式
輸出的是幾個字符的GBK編碼,而非內存存儲形式。將程序中的Asc函數換為AscW函數,得到另一個示例getStringUnicodeFormat.asp。
運行結果如圖2-6所示。
該例輸出的是幾個字符的Unicode編碼。對照變量的內存存儲形式,可以發現,每個字符的兩個字節順序是相反的。如“今”字的內存存儲形式是“CA 4E”,而該例輸出的是“4E CA”。這是為什么呢?其實還是字節順序的問題。“今”字的Unicode編碼其實就是“4E CA”,其中“4E”是高字節,“CA”是低字節,內存變量采用的是Little Endian方式,所以是“CA 4E”。

圖2-6 字符串的Unicode編碼形式
簡單總結一下,涉及字節操作的時候(如使用LenB、MidB、LeftB等函數),才需要考慮變量的內存存儲形式。如果只是字符操作,那么在字符這一層面考慮即可,Asc等函數會屏蔽掉字節順序的問題,返回正確的結果。