Ответ 1
Обозначенные вами символы присутствуют в Unicode. Вот их коды символов в шестнадцатеричном формате и как они кодируются в UTF-8:
Ç ç Ğ ğ İ ı Ö ö Ş ş Ü ü
Code: 00c7 00e7 011e 011f 0130 0131 00d6 00f6 015e 015f 00dc 00fc
UTF8: c3 87 c3 a7 c4 9e c4 9f c4 b0 c4 b1 c3 96 c3 b6 c5 9e c5 9f c3 9c c3 bc
Это означает, что если вы пишете, например, байты 0xc4 0x9e в файл, вы написали символ Ğ, а любой программный инструмент, который понимает UTF-8 , должен читать это как Ğ.
Обновление:. Для правильного преобразования алфавитного порядка и кода на турецком языке вы должны использовать библиотеку, которая понимает локали, как и для любого другого естественного языка. Например, в Java:
Locale tr = new Locale("TR","tr"); // Turkish locale
print("ÇçĞğİıÖöŞşÜü".toUpperCase(tr)); // ÇÇĞĞİIÖÖŞŞÜÜ
print("ÇçĞğİıÖöŞşÜü".toLowerCase(tr)); // ççğğiıööşşüü
Обратите внимание, что я в верхнем регистре становится İ, а я в нижнем регистре становится ı. Вы не говорите, какой язык программирования вы используете, но, конечно же, его стандартная библиотека также поддерживает локали.
Unicode определяет кодовые точки и определенные свойства для каждого символа (например, если это цифра или буква, для буквы, если она имеет верхний регистр, строчный регистр или заголовок) и некоторые общие алгоритмы для обработки текста Unicode (например, как смешивать текст справа налево и текст слева направо). Алфавитный порядок и правильное преобразование случаев определяются национальными органами стандартизации, такими как Институт языков Финляндии в Финляндии, Real Academia Española в Испании, независимо от Unicode.
Обновление 2:
Тест ((ch&0x20)==ch)
для нижнего регистра нарушен для большинства языков в мире, а не только для турецких. Так же и алгоритм преобразования верхнего регистра в нижний регистр, о котором вы упоминаете. Кроме того, тест на письмо является неправильным: на многих языках Z не является последней буквой алфавита. Чтобы правильно работать с текстом, вы должны использовать библиотечные функции, написанные людьми, которые знают, что они делают.
Unicode должен быть универсальным. Создание национальных и языковых вариантов кодировок - вот что привело нас к беспорядку, который пытается решить Unicode. К сожалению, нет универсального стандарта для заказа символов. Например, на английском языке a = ä < z, но на шведском языке < z < ä. В немецком языке U эквивалентен U одним стандартом, а UE - другим. В финском языке Ü = Y. Невозможно заказать кодовые точки, чтобы порядок был правильным на каждом языке.