2013-03-05 154 views
2

我想輸出ASCII字符131(ƒ - 帶鉤子的拉丁小寫字母f)到一個消息框,但由於某種奇怪的原因,它顯示爲空字符串。我有以下VB.NET代碼:爲什麼這個ASCII字符輸出爲空字符串(VB.NET)?

Dim str As String = Convert.ToChar(131) 
MessageBox.Show(str, "test", MessageBoxButtons.OK, MessageBoxIcon.Information) 
Debug.Print(str) 

在上面,但Debug.Print語句顯示在「立即窗口」正確的字符消息框不顯示任何內容。我有大約70個其他ascii字符,這些方法都可以很好地工作,但只有少數顯示爲空白(131和EN短劃線150)。

例如,下面的工作:

str = Convert.ToChar(164) 
MessageBox.Show(str, "test", MessageBoxButtons.OK, MessageBoxIcon.Information) 
Debug.Print(str) 

我也試圖轉換爲UTF-8,但我得到了相同的行爲在第一個代碼段:

Dim utf8Encoding As New System.Text.UTF8Encoding(True) 
Dim encodedString() As Byte 
str = Convert.ToChar(131) 
encodedString = utf8Encoding.GetBytes(str) 
Dim str2 As String = utf8Encoding.GetString(encodedString) 
MessageBox.Show(str2, "test", MessageBoxButtons.OK, MessageBoxIcon.Information) 
Debug.Print(str2) 

這是一個編碼的問題?感謝您的任何見解。

編輯:只是爲了澄清,我實際上並沒有試圖將該字符輸出到消息框。該代碼只是一個測試。我試圖將字符作爲字符串傳遞給在第三方XML編輯器控件中使用它的函數,但它顯示爲空白。即使在Visual Studio中進行調試時,也可以看到它的值等於「」。

編輯2:感謝來自下面接受的答案的一些調查,我發現我使用了錯誤的Unicode字符。對於這個f字符,使用的代碼是ToChar(402)。這工作完美。謝謝你們。

+2

字符」ƒ「不是Ascii字符。這可能或可能不相關。此字符在不同的字符代碼中具有不同的代碼號。 – 2013-03-05 17:13:00

+0

在vb.net(MS Sans Serif)中查看默認字體時,我看不到那個符號,粘貼到記事本中,然後更改爲Sans Serif這個符號顯示爲一個奇怪的字符,它可能是字體問題嗎? – bendataclear 2013-03-05 17:22:06

+0

MessageBox使用默認的系統字體。如果該字符不在默認系統字體中,那麼您將看不到該字符。你可以推出你自己的MessageBox,或者看看[Extended Message Box Library](http://www.news2news.com/vfp/?solution=5),它看起來像它允許你改變字體(以及其他的東西)在標準的MessageBox上。 – codechurn 2013-03-05 17:36:42

回答

4

正如其他人所指出的那樣,「ƒ」字符不是ASCII字符。 ASCII是嚴格的7字節格式,「擴展ASCII」字符完全不同,具體取決於所引用的編碼。例如,Windows CodePage 1250對於字符131(0x83)具有空格,但CodePage 1252在該插槽中具有「ƒ」字符。

我在下面的例子中使用1252,但是如果您要轉換大量的編碼ASCII文本,您應該確保正確識別正在使用的編碼並使用正確的代碼頁進行轉換。

處理這個問題的最好方法,我認爲只是將所有內容都轉換爲Unicode,並且遠離擴展的ASCII,除非出於傳統原因絕對必要。要獲得「ƒ」字,然而,你可以做,例如:

Imports System.Text 

然後:

Dim enc1252 As Encoding = Encoding.GetEncoding(1252) 
Dim bArr(0) As Byte 
bArr(0) = CByte(131) 

Dim str2 As String = Encoding.Unicode.GetString(_ 
        Encoding.Convert(enc1252, Encoding.Unicode, bArr)) 

MessageBox.Show(str2, " test", MessageBoxButtons.OK, _ 
       MessageBoxIcon.Information) 

的VisualStudio本身使用Unicode,但是,如果你只需要顯示「 ƒ「字符,並且不需要實際轉換任何傳統文本,您始終可以這樣做:

MessageBox.Show("ƒ", " test", MessageBoxButtons.OK, _ 
       MessageBoxIcon.Information) 
+0

感謝您提供豐富的解決方案! (使用在我的上下文中工作的1252編碼,只是將硬編碼字符傳遞給該函數並沒有_not_ work) – http203 2013-03-05 18:24:42

+0

@ http203您正在使用哪種版本的VisualStudio? – 2013-03-05 18:39:46

+0

@J 2008目前。順便說一句,我發現ToChar(402)正確輸出字符... visual studio使用什麼代碼頁,我應該引用什麼官方文檔? – http203 2013-03-05 18:46:08

相關問題