2011-01-07 115 views
4

在C#是那裏擴展的ASCII值(128-255)編碼成它們的單字節值如下所示的方式:http://asciitable.com/編碼爲單字節擴展ASCII值

我使用Encoding.UTF8試過。 GetBytes()但返回擴展代碼的多字節值。我不需要255以上的任何東西,但至少支持這些東西會很好。我試圖將文本數據發送到Arduino運行和LED矩陣,並且想要處理重音字母,而不必處理多字節字符。

編輯:爲了澄清,LED矩陣沒有具體的代碼頁。基本上,無論我說的是什麼。它或者arduino沒有內置的文本支持。它只是一個笨的128x8像素顯示屏,控制器手動逐個像素地繪製文本。因此,我實際上爲它提供了一個字體(作爲頭文件中的字節數組),並且可以使任何字符代碼對應於我想要的任何輸出......因此,使用哪個代碼頁並不是真正的問題哪一個會給我完整的8位字符。

+1

Yup ...我得到了unix timestamp的東西工作......只是手動創建了字節數組,然後在構建一個字符串之前,通過Encoding.ASCII.GetBytes()...進行了搗碎......所以,現在我只是需要擴展ASCII,以便將文本發送到顯示器,而不是像時間戳那樣的原始數據。 – 2011-01-07 08:19:08

回答

4

只需將代碼頁碼傳遞給構造函數Encoding即可。如果你鏈接的是正確的「擴展ASCII」表,那將是437

但是,IBM437編碼在DOS程序和Windows控制檯應用程序之外並不常見。否則,西歐語言的標準編碼是ISO-8859-1(Windows代碼頁28591)或windows-1252

1

Default編碼應該處理。或者使用ANSI代碼頁/編碼。

+1

雖然這可能會起作用,但使用特定編碼會更健壯,因爲程序正在與外部單元進行通信。 – Guffa 2011-01-07 08:26:57

2

您需要知道LED矩陣使用的代碼頁。它肯定是一個像1252這樣的標準版本,它是西歐和美洲的Windows代碼頁。

 var bytes = Encoding.GetEncoding(1252).GetBytes("Åãrdvárk");