|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.12.2013, 19:02 | #11 |
Пользователь
Регистрация: 01.12.2013
Сообщений: 17
|
Кстати, ведь из utf-8 в ср1251 можно перейти побитовым сдвигом влево?
Или я что-то не так понял. |
02.12.2013, 19:53 | #12 | |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
1. определяемся с именами входного-исходного файла и настраиваемся под переданные параметры обработки.
2. сторонней функцией перегоняем в массив utf16 (каковой соответствует Unicode-таблице). (здесь необходима обработка ее ошибок) 3. конструируем хэшмапу, а то иначе придется тупо в цикле первбирать все допустимые для Koi-8 символы Юникода, что в ~150 раз дольше поиска по хэшу. 4. резервируем память в результирующей строке. (не проверял, а сбрасывается ли аллокированная память после добавления очередного символа?) 5. ищем по хешу Кои-соответствия и добавляемся в результат. (Случай ненахождения обрабатывается весьма коряво.) 6. пишем результат Цитата:
В ср1251 все расположено примерно по алфавиту, так что можно было бы обойтись и прибавлением константы, если обрабатывать отдельно: 1. конверт строчных 2. конверт заглавных 3. конверт ё маленькой 4. конверт Ё большой 5. конверт латиницы со знаками препинания из первой половины ср1251таблицы... да учитывать, что utf8 разный по длине и допускает использование нескольких кодов для одного символа. Кароч, мутно. Проще сделать полное посимвольное соответствие в хеше, так получим понятность и выиграем в скорости) Последний раз редактировалось Smogg; 02.12.2013 в 20:06. |
|
02.12.2013, 21:07 | #13 |
Пользователь
Регистрация: 01.12.2013
Сообщений: 17
|
Вот, спасибо за подробный разбор по пунктам. очень кстати )
Код ведь заработает на Си? Линукс. Просто, только-только начал изучение этого языка и врятли понимаю как код из С++ сделать удобоваримым для компилятора gcc Си. допустим cout и cin ясно на что заменяются... |
02.12.2013, 21:42 | #14 | |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
Мне тоже тяжело читать код без пояснений.
Цитата:
Тока зачем Вам этот хардкор? Я не верю, что есть системы, где не можно быть С++. |
|
02.12.2013, 21:49 | #15 |
Пользователь
Регистрация: 01.12.2013
Сообщений: 17
|
Я с большим удовольствием избежал бы этого хардкора... Дело в том что это одна из моих лабораторных. Сделал все остальные и уже давно сдал, а с этим чудом вожусь еженощно уже третью неделю. Поскольку изучаем только Си, да еще и в Линуксе... соответственно работы тоже принимают в Си.
|
02.12.2013, 22:09 | #16 |
Участник клуба
Регистрация: 14.06.2011
Сообщений: 1,138
|
А-аа... Тогда вам нужно делать собственную реализацию конверта Utf8 в Utf16.
И лишь после того, как что-то начнет получатся, можно посмотреть, как же люди решили ту же задачу. Собственно, в этом и весь смысл. Как я понял, значимые биты в Utf8 в идут в том же порядке, как и в Utf16? Да? То есть, нужно определить, что является служебной информацией, выбросить ее, а потом сдвинуть остаток в один ushort. |
02.12.2013, 22:17 | #17 | |
Пользователь
Регистрация: 01.12.2013
Сообщений: 17
|
Цитата:
да, получается что так. Поэтому у меня и возникла мысль про сдвиг. После реализации в Utf16 задумал перевести все там же в ср1251, так как из нее я имею представление как перекодировать в koi8 |
|
03.12.2013, 08:49 | #18 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
Будет гораздо проще переводить из utf16 прямо в koi.
|
03.12.2013, 09:12 | #19 |
Форумчанин
Регистрация: 13.11.2013
Сообщений: 149
|
Будет работать только для 1-о и 2-х байтовых символов UTF-8
Код:
|
04.12.2013, 18:30 | #20 |
Пользователь
Регистрация: 01.12.2013
Сообщений: 17
|
nikmoon, спасибо большое! Данный код прекрасно работает на Си, после некоторых изменений. Постараюсь приспособить его под файловый ввод-вывод и выложу.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) | Farridjan | Помощь студентам | 1 | 03.07.2009 12:24 |
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) | 5Paladin5 | Помощь студентам | 3 | 02.07.2009 09:12 |
Очень нужна помощь! Нужно найти ошибку в очень простой программе. | Lex55555777 | Помощь студентам | 3 | 07.12.2008 20:32 |