哪个char不是UTF-16?

时间:2018-05-14 11:08:31

标签: c# char utf-16

我需要一些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;
    }
}

1 个答案:

答案 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。

有关详细信息,请参阅:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets