我需要一些UTF-16不支持的字符。我找不到他们。 你能帮我吗?
char[] letters = tbvstup.Text.ToCharArray();
for (int i = 0; i < letters.Length; i++)
{
if(letters[i] == 'ě' || letters[i] == 'č' || letters[i] == 'ř' || letters[i] == 'ť' || letters[i] == 'ď' || letters[i] == 'ň' || letters[i] == 'ů')
{
ASCII = false;
pbascii.BackColor = Color.Red;
}
if (letters[i] == '˛' || letters[i] == '˘' || letters[i] == 'ˇ' || letters[i] == '˙' || letters[i] == '€' || letters[i] == '‡' || letters[i] == '‰' || letters[i] == 'ě' || letters[i] == 'č' || letters[i] == 'ř' || letters[i] == 'ť' || letters[i] == 'ď' || letters[i] == 'ň' || letters[i] == 'ů')
{
ISO = false;
pbiso.BackColor = Color.Red;
}
if (letters[i] == '€')
{
CP852 = false;
pbcp852.BackColor = Color.Red;
}
if (letters[i] == '£')
{
CP1250 = false;
pbcp1250.BackColor = Color.Red;
}
if (letters[i] == '') // <-- What do I need to put here?
{
UTF16 = false;
pbutf16.BackColor = Color.Red;
}
}
答案 0 :(得分:3)
ASCII 是一种7位编码,其中字符代码与存储的字节之间存在1:1的关系。
CP852 , CP1250 和其他人使用了额外的位(与ASCII相比),因此他们有128个额外的值来编码额外的字符。他们可能会重新定义一些较低的128值。存储的字符和字节之间仍然存在1:1的关系,如:如果它不适合字节,则不能在此代码页中(这就是为什么有这么多)。
UTF-8 和 UTF-16 非常不同。它们属于Unicode字符集,它将唯一数字分配给任何语言的任何字符(现在或古代 - 甚至象形文字都有自己的set of values)。 unicode值(代码点)不限于适合某些位的数量,因为这是编码的工作:UTF-8使用8位单位(也称为字节)和(对于英语)主要使用每个字符一个字节,但根据需要最多可使用六个字节。 UTF-16使用16位单元,可能需要其中两个来编码特定的代码点。
因此没有无法用UTF-16编码的有效字符(由unicode定义),尽管较高值的字符可能需要两个16位单元(&#34;代理对&#34;)。
C#(。Net,真的)使用16位char
数据类型,因此实际上在内部使用UTF-16。