Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: можно ли что-то сделать с двухбайтовостью кириллицы?  (Прочитано 1024 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 1saturn1

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
есть простой код на Си

#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char A[255];
fgets(A,sizeof(A), stdin);
printf("%d\n",A[0]);
printf("%d\n",A[1]);
}
результат выполнения в винде при вводе буквы "и"
Цитировать
и
168
10
в ubuntu через терминал
Цитировать
и
208
184
при этом в любых русских буквах - буква разбивается на 208 или 209 и код буквы

немного погуглив, я понял что 208 или 209 - это управляющий для консоли символ, вот только из-за этого управления ряд программ очен усложняется, что можно сделать  в ubuntu чтобы киррилица не разбивалась на два байта, как в винде?
( в обоих случаях компилятор gcc )

Оффлайн Дмитрий Бо

  • Погонщик серверов
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 3549
  • Я не техподдержка, я за порядком слежу
    • Просмотр профиля
немного погуглив, я понял что 208 или 209 - это управляющий для консоли символ
d0b8 — это "и" в Юникоде.
Так было, так есть и так будет всегда ©

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
В вашем случае используется кодировка UTF-8, в ней все символы, кроме первых 128, занимают по 2 и более байт. Если вы хотите, чтобы русские буквы были, как и латинские, по 1 байту, надо, чтобы консоль работала в соответствующей кодировке, либо самому перекодировать всё в однобайтовую, типа WINDOWS-1251 или KOI8-R. Тогда программа не сможет работать с символами типа Ω, ®, ¼, ⵅ, ლ, Ղ  :'(

В питоне, кажется, есть возможность автоматической перекодировки вводимых символов в ту кодировку, которая вам нужна. Должна быть и в других подобных языках. Но может быть, я ошибаюсь.

Цитировать
и

U+0438 CYRILLIC SMALL LETTER I

Основные свойства символа

В стандарте с версии 1.1
Категория Юникода: Буквы, в нижнем регистре

Другие полезные представления

UTF-8: 0xD0 0xB8
UTF-16: 0x0438

Восьмеричное представление UTF-8 в языке C: \320\270
Десятичное представление XML: &#1080; ( примечание: 1080 == 0x438; )

Вообще, почитайте про UTF-8, UTF-16 и т. д.
« Последнее редактирование: 02 Декабря 2012, 13:25:52 от inkblack »
Делюсь знаниями, но их у меня мало!

Оффлайн 1saturn1

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
оказалось все еще проще.
Проще чем думалось, оказывается в терминале есть такое , этот пункт почему то не увидели трое человек, но спасибо что натолкнули на поисковый запрос который вывел меня к ответу

Оффлайн inkblack

  • Старожил
  • *
  • Сообщений: 1216
    • Просмотр профиля
Ну я же и написал вам, «надо, чтобы консоль работала в соответствующей кодировке».

Правда, сам я этим никогда не пользовался. И там есть нюансы. Некоторые проги работают некорректно...
Делюсь знаниями, но их у меня мало!

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
inkblack, а теперь перейдите в реальную консоль (alt+ctrl+F1) и попробуйте там. Так что не все так просто. От задач зависит.
Извините, я все еще учусь

 

Страница сгенерирована за 0.017 секунд. Запросов: 22.