2012-12-19 123 views
1

如何在C#中使字符串接受不可打印的ASCII擴展字符(如•),因爲當我嘗試將字符串放在空格或空字符串中時。在C#中擴展的ASCII字符串

+2

你需要在這裏提供一些更多的上下文轉換它:你是在編寫一個字符串文字,從控制檯讀取字符串還是通過UI控制? – dasblinkenlight

+0

你可以舉例說明你的代碼嗎?澄清問題? – imslavko

+2

如果您還沒有閱讀Joel Spolsky的文章,請務必閱讀本文:[絕對最低限度的每位軟件開發人員都必須積極地瞭解Unicode和字符集(無藉口!)](http://www.joelonsoftware.com /articles/Unicode.html) – Cameron

回答

0

試試這個...... 將這些字符串轉換爲字符串。

string equivalentLetter = Encoding.Default.GetString(new byte[] { (byte)letter }); 

現在,等價的字母包含正確的字符串。 我試過這個歐元符號,它的工作。

+1

你在做什麼只是扔一部分將原來的字母(char!= byte)移走並用未指定的編碼處理。 (編碼。默認配置取決於) – Polity

+0

@Polity:我說這只是一種方式,我用這個渲染了一些擴展的ascii字符......這只是一個解決方案或上述問題。 –

+0

不,不能保證你的電話會在QA的機器上工作,因爲Encoding.Default取決於配置 – Polity

0

.NET字符串是UTF-16編碼的,而不是extended-ascii(不管是什麼)。通過簡單地向一個字符添加一個數字將會給你另一個在UTF-16 plain set中定義的字符。如果您想要查看擴展ASCII編碼中的底層字符,則需要將新計算的字母從您正在討論的任何編碼轉換爲UTF-16。請參閱:http://msdn.microsoft.com/en-us/library/66sschk1.aspx

+0

「擴展ascii」基本上是每個字符的每個字符的文本編碼,其中0-127個字節的值與純ASCII的文本具有相同的含義。 (儘管技術上UTF-8,該字節範圍內每個字符1個字節,也可以看作是擴展ASCII)術語被濫用者誤解/誤解。 – Nyerguds

1

擴展ASCII僅爲ASCII,8位高位設置爲不同的值。

問題出在沒有委員會批准擴展ASCII標準的事實。這裏有很多變種,沒有辦法告訴你正在使用什麼。

現在C#使用UTF-16編碼,它將與您正在使用的任何擴展ASCII不同。

你必須找到匹配的Unicode字符並顯示如下

string a ="\u2649" ; //where 2649 is a the Unicode number 
Console.write(a) ; 

另外,您可以找出哪些編碼您的文件使用,並使用它像這樣 如。編碼的Windows-1252:

Encoding encoding = Encoding.GetEncoding(1252); 

和UTF-16

Encoding enc = new UnicodeEncoding(false, true, true); 

,並使用

Encoding.Convert (Encoding, Encoding, Byte[], Int32, Int32) 

詳情here