我一直在為一個學校專案使用 Visual Basic(在 .NET 上)中的 ASCII,最近發現了一些我不知道如何解決的問題。在某些情況下,使用將整數轉換為 ASCII Asc(),然后將其復制到另一個腳本并使用轉換為整數會回傳錯誤的字符。Chr()例如。
Dim i As String = Chr(29)
Console.WriteLine(i) ' Returns ?
Dim i2 As Integer = Asc("?")
Console.WriteLine(i2) ' Returns 63
目前,我認為這可能是由于幾件事:
- 一些 ASCII 代碼無法顯示(29 是 GS,我不相信可以顯示),因此恢復使用 29 的 alt 代碼,即 ?。
- 該
Asc()函式可能會求助于 ? 為 63 的其他字符編碼形式? - 我沒有使用正確的方法來完成這項任務——很有可能。
有人可以向我解釋為什么會發生這種情況和/或向我展示防止此問題發生的方法嗎?如果這是一個真正的問題,對于使用 VB 和字符編碼的人來說,這似乎是一個非常煩人的問題,但是我會對此感到驚訝,因為我很久沒有使用字符編碼并且可能錯過了一些東西。
提前致謝!
uj5u.com熱心網友回復:
Chr如果你這樣做了,你并沒有轉換你使用的輸出,Asc那么你會得到預期的結果。這個:
Dim i = 29
Dim ch = Chr(i)
Console.WriteLine(ch)
i = Asc(ch)
Console.WriteLine(i)
輸出這個:
? 29
你的代碼在做什么不是你描述的。
uj5u.com熱心網友回復:
您在該行輸入的“?”
Dim i2 As Integer = Asc("?")
與結果不一樣
Dim i As String = Chr(29)
因為您的源代碼是 Unicode 編碼的,所以它不是 ASCII

uj5u.com熱心網友回復:
根據一些調查,這似乎是 IDE 文本編輯器的行為與該Asc功能可能令人驚訝的互動的結果。正如另一個答案所指出的,文本編輯器支持完整的 Unicode 字符集(包括在識別符號中,例如?_?.NET 中的合法識別符號)。當我用一個字符版本的Asc測驗(即Asc("?"c))反匯編檢查時,發現它被處理為0x2194,即Unicode碼點U 2194左右箭頭。
這表明 IDE 文本編輯器正在將 ASCII 轉換為最佳等效 Unicode 代碼點。呼叫Asc結果回傳 63,它對應于一個問號,我相信這是在沒有有效轉換時嘗試表示 Unicode 代碼點的正確結果。這種行為的正確性值得商榷,但我不確定我們是否應該期待太多,Asc因為無論如何我認為它更像是一個兼容性例程——它似乎不是為了嘗試反向轉換超出 U FF(或可能是 U 7F)的 Unicode 代碼點,而是將其視為?.
請注意,如果我呼叫AscW而不是Asc,我會得到 8596(或 &H2194),這是我根據之前對反匯編的調查所期望的。
實際上,這似乎不應該是一個問題。如果您真的關心確切的字符代碼,那么您應該使用ChrorChrW來生成字符,而不是依賴 IDE 準確呈現您鍵入的字符。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/516090.html
