2010-11-16 50 views

回答

6

這一現象在Chr command的文檔中定義:

返回的值取決於代碼頁當前線程,它包含在TextInfo類的ANSICodePage財產在System.Globalization命名空間。您可以通過指定System.Globalization.CultureInfo.CurrentCulture.TextInfo.ANSICodePage來獲取ANSICodePage。

因此,對於大於127的值,Chr的輸出與系統有關。如果您想要重現結果,請致電Encoding.GetEncoding(String)創建所需的Encoding實例,然後使用Encoding.GetChars(Byte())將您的數值轉換爲字符。

如果go up one level在你的問題掛在圖表中,你會看到,他們並不認爲這張圖是永遠Chr命令的輸出:出現在Windows上面127取決於

字符在選定的字體上。

本節中的圖表顯示控制檯應用程序的默認字符集。

您的應用程序是WinForm應用程序,而不是控制檯應用程序。即使在控制檯中,所使用的字符集也可以更改(例如,通過使用chcp命令),因此單詞「default」。

有關.net中使用的編碼的詳細信息,我推薦以下MSDN文章:Character Encoding in the .NET Framework

1

你是怎麼寫這些的?因爲通常情況下,當您使用輸出流函數時,您可以指定與之一起使用的編碼。

編輯:我知道這是不是C#,但可以看到的想法...

你必須設置你的文件流的編碼,通過做這樣的事情: Setting the encoding when creating the filestream

+0

我在控制檯中使用了writeline(chr(Number))。 Textbox.text = chr(數字)爲你看到的圖片。 – 2010-11-16 14:33:54

2

第一個字符集是代碼頁437(CP437),第二個字符集看起來像代碼頁1252(CP1252),也稱爲Windows Latin-1。

我猜想VB.Net只是簡單地爲PC提供默認編碼。

+1

猜測是準確的,Chr()和Asc()使用默認的系統代碼頁,在西歐和美洲通常爲1252。使用ChrW()和AscW()來處理Unicode。 437是舊的IBM PC代碼頁,仍然是控制檯模式應用程序的默認值。 – 2010-11-16 15:58:17