大我使用這個代碼來生成U+10FFFC
使用Unicode字符超過2個字節與.net
var s = Encoding.UTF8.GetString(new byte[] {0xF4,0x8F,0xBF,0xBC});
我知道這是私人使用等,但它會顯示一個字符,我想預計何時顯示它。操縱這個unicode字符時會出現問題。
如果我後來做:
foreach(var ch in s)
{
Console.WriteLine(ch);
}
而不是將它打印只是單個字符,它打印兩個字符(即字符串顯然是由兩個字符)。如果我改變我的循環,這些字符添加回一個空字符串,像這樣:
string tmp="";
foreach(var ch in s)
{
Console.WriteLine(ch);
tmp += ch;
}
在本月底,tmp
將打印只是單個字符。
這裏究竟發生了什麼?我認爲char
包含一個unicode字符,我從來不必擔心一個字符有多少個字節,除非我正在轉換爲字節。我真正的用例是我需要能夠檢測字符串中使用了非常大的unicode字符。目前我有這樣的事情:
foreach(var ch in s)
{
if(ch>=0x100000 && ch<=0x10FFFF)
{
Console.WriteLine("special character!");
}
}
但是,由於這種分裂非常大的字符,這是行不通的。我如何修改這個以使其工作?
System.Globalization.StringInfo是要走的路。其餘代碼不正確。看看:https://msdn.microsoft.com/en-us/library/system.globalization.stringinfo(v=vs.110).aspx – X181
這是不明確你的意思。這個答案的代碼有問題嗎? –