2013-03-01 99 views
0

我試圖顯示一組撲克牌,其中有1F0A0到1F0DF範圍內的Unicode值。每當我嘗試在代碼中使用超過4個字符的字符時,我都會遇到錯誤。在這種情況下可以使用這些字符嗎?我正在使用Visual Studio 2012.如何在C#控制檯中顯示擴展的Unicode字符?

char AceOfSpades ='\ u1F0A0';打字後立即給出錯誤「字符字面值太多的字符」這仍然顯示與Unicode或UTF8編碼。如果我嘗試像上面那樣顯示'\ u1F0A'...使用Unicode它會顯示'?'使用UTF8它顯示3個字符。

我嘗試了所有給定的選項OutputEncoding string AceOfSpades = "\U0001F0A0"; 默認,的Unicode,ASCII:?? UTF7:+2DzcoA- UTF8:四個奇怪的字符 UTF32,BigEndianUnicode:IOException異常 Console.OutputEncoding = System.Text.Encoding.UTF32;,儘管是一個選項,崩潰,即使它是隻有一行代碼。 UTF16不在列表中。

如何檢查我使用的是哪個版本的Unicode?

+2

你是什麼意思「我得到錯誤」?你的意思是編譯時錯誤,還是隻是不能正確顯示?這是在命令行控制檯上嗎? – 2013-03-01 23:25:42

+0

另外,請提供一個簡單的代碼示例,說明您面臨的問題。 – millimoose 2013-03-01 23:31:18

+0

我認爲輸出從\ u0000到\ uFFFF有限,但我現在可能會混淆。 – 2013-03-01 23:39:14

回答

0

爲了清楚起見,我將假定(直到您編輯您的帖子爲止)您的符號顯示不正確。如果不是這樣,我會刪除這個答案。

將控制檯的編碼設置爲Unicode或UTF-8。

Console.OutputEncoding = System.Text.Encoding.Unicode

Console.OutputEncoding = System.Text.Encoding.UTF8

確保字體可以顯示Unicode/UTF-8字符(如Lucida控制檯)。

+0

'char AceOfSpades ='\ u1F0A0';' 立即輸入後給我錯誤 「字符文字太多字符」 這仍然顯示與Unicode或UTF8編碼。 如果我嘗試顯示上面的'\ u1F0A'... 使用Unicode時,它顯示'?' 使用UTF8它顯示3個字符。 – 2013-03-02 01:03:34

+0

@Nigel你必須寫'string ace =「\ U0001F0A0」'如果你把它轉換成char數組,你會注意到它的長度爲2,因爲黑桃字符的ace在UTF-16的擴展平面上,所以必須由兩個16位'char'表示,稱爲'代理對'。因此,您不能將黑桃字符的ace存儲在一個只能佔用16位的「char」中。 – 2013-07-20 16:56:26

1

爲了使用基本多語言平面以外的字符,您需要使用\U而不是\u進行轉義。這需要8個十六進制數字(老實說,這是毫無意義的,因爲所有的Unicode字符都可以用六個十六進制數字來編寫)。

但是,.NET中的char類型只能表示UTF-16代碼單元,這意味着BMP之外的字符需要一對(代理對)。所以你必須把它做成一個字符串。

string AceOfSpades = "\U0001F0A0"; 
+0

查閱char的文檔: http://msdn.microsoft.com/en-us/library/system.char(v=vs.71).aspx 「Char值類型表示Unicode字符,也稱爲一個Unicode代碼點,並且實現爲一個16位數字,範圍從十六進制0x0000到0xFFFF。一個Char不能表示一個Unicode字符,它被編碼爲代理對,但是,一個字符串,它是Char的集合對象,可以表示編碼爲代理對的Unicode字符。「 – 2013-07-16 16:03:37

+0

@Ciemnl你想讓我在那裏檢查什麼? (FWIW http://msdn.microsoft.com/en-us/library/system.char.aspx是文檔的最新版本) – 2013-07-16 20:38:40

+0

哎呀,沒關係,我發佈了這個以強化您的觀點。 – 2013-07-20 16:57:54

相關問題