Какой символ отсутствует в UTF-16? - PullRequest
0 голосов
/ 14 мая 2018

Мне нужны некоторые символы, которые 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 голосов
/ 14 мая 2018

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, хотя для символов с более высокими значениями могут потребоваться две 16-разрядные единицы («суррогатная пара»).

C # (на самом деле .Net) использует 16-битный тип данных char, поэтому фактически использует UTF-16 для внутреннего использования.

См. Для получения дополнительной информации: Абсолютный минимум каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборы символов

...