我需要一些 UTF-16 不\xc2\xb4t 支持的字符。我\xc2\xb4找不到他们。\n你能帮我吗?
\n\nchar[] letters = tbvstup.Text.ToCharArray();\nfor (int i = 0; i < letters.Length; i++)\n{\n if(letters[i] == '\xc4\x9b' || letters[i] == '\xc4\x8d' || letters[i] == '\xc5\x99' || letters[i] == '\xc5\xa5' || letters[i] == '\xc4\x8f' || letters[i] == '\xc5\x88' || letters[i] == '\xc5\xaf')\n {\n ASCII = false;\n pbascii.BackColor = Color.Red;\n }\n if (letters[i] == '\xcb\x9b' || letters[i] == '\xcb\x98' || letters[i] == '\xcb\x87' || letters[i] == '\xcb\x99' || letters[i] == '\xe2\x82\xac' || letters[i] == '\xe2\x80\xa1' || letters[i] == '\xe2\x80\xb0' || letters[i] == '\xc4\x9b' || letters[i] == '\xc4\x8d' || letters[i] == '\xc5\x99' || letters[i] == '\xc5\xa5' || letters[i] == '\xc4\x8f' || letters[i] == '\xc5\x88' || letters[i] == '\xc5\xaf')\n {\n ISO = false;\n pbiso.BackColor = Color.Red; \n }\n if (letters[i] == '\xe2\x82\xac')\n {\n CP852 = false;\n pbcp852.BackColor = Color.Red;\n }\n if (letters[i] == '\xc2\xa3')\n {\n CP1250 = false;\n pbcp1250.BackColor = Color.Red;\n }\n if (letters[i] == '') // <-- What do I need to put here?\n {\n UTF16 = false;\n pbutf16.BackColor = Color.Red;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
ASCII是一种 7 位编码,其中字符代码和存储的字节之间存在 1:1 的关系。
CP852、CP1250和其他使用额外位(与 ASCII 相比),因此它们有 128 个额外值来编码额外字符。他们可能会重新定义 128 个较低值中的一些值。存储的字符和字节之间仍然存在 1:1 的关系,如下所示:如果它不适合字节,则它不能在此代码页中(这就是为什么有如此多的代码页)。
UTF-8和UTF-16有很大不同。它们属于 Unicode 字符集,该字符集为任何语言(现代的或古代的 - 甚至象形文字也有自己的一组值)中的任何字符分配唯一的数字。unicode 值(代码点)并不限制自己适合某些位数,因为这是编码的工作:UTF-8 使用 8 位单位(也称为字节)并且(对于英语)主要使用每个字符一个字节,但根据需要最多可以使用六个字节。UTF-16 使用 16 位单元,可能需要其中两个单元来编码特定的代码点。
因此,不存在不能用 UTF-16 编码的有效字符(由 unicode 定义),尽管较高值的字符可能需要两个 16 位单元(“代理对”)。
C#(实际上是.Net)使用 16 位char数据类型,因此实际上在内部使用 UTF-16。
有关更多信息,请参阅:每个软件开发人员绝对必须了解的关于 Unicode 和字符集的绝对最低限度