哪个字符不在 UTF-16 中?
Which char is not in 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;
}
}
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 位单元 ("surrogate pair")。
C#(.Net,实际上)使用 16 位 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;
}
}
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 位单元 ("surrogate pair")。
C#(.Net,实际上)使用 16 位 char
数据类型,因此实际上在内部使用 UTF-16。