- Готовый модуль для конвертирования текстовых строк из DOS кодировки в Windows и обратно
- Перекодировка из OEM-866 в Windows-1251
- Русский текст в консоли
- Преобразовать текст из кодировки Win1251 в DOS-866
- Настройка кодировки шрифтов в cmd/bat (иероглифы, кракозябры)
- Исправляем проблему с кодировкой с помощью смены шрифта
- Исправляем проблему с кодировкой с помощью смены кодировки
Готовый модуль для конвертирования текстовых строк из DOS кодировки в Windows и обратно
Может кому пригодится.
Enjoy
Преобразование текстовых файлов из кодировки DOS в кодировку Windows и обратно
Программа преобразования текстовых файлов из кодировки DOS в кодировку Windows и обратно.
Преобразование текстовых файлов из кодировки DOS в кодировку Windows и обратно (tasm)
Преобразование текстовых файлов из кодировки DOS в кодировку Windows и обратно по теме.
Перевод из кодировки Dos в Windows и обратно
Доброго времени суток. У меня такая проблема, как написать программу которая бы переводила текст из.
В чём отличия кодировки ms dos от кодировки ms windows?
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?
В Турбо Паскале все сплошь на WinAPI пишут.
Добавлено через 2 часа 9 минут 22 секунды
При чем тут столбец Hex ?
Я имею в виду, что код написанный polivets не оптимален.
1) Быстрее было бы использовать перекодировку по таблице.
Точнее две таблицы — туда и обратно.
2) Вообще нет смысла это делать, так как в WinAPI наверняка уже есть такая функция.
Зачем изобретать велосипед ?
Так понятнее или еще подробнее разъяснить ?
Модуль предназначен для TP, как мы уже выяснили, там нет WinAPI.
Я согласен, что использование XLAT-таблиц намного ускорит перекодирование большого текста, но у нас всего лишь тип String (255 символов). Да и сама откомпилированная программа на TP выполняется под Windows в 16 битной подсистеме, что такие тормаза, что никакой неоптимизированный алг не затмит.
Изобретать велосипед — это обычный довод, чтобы ничего не делать! А может кому-то будет интересно, как сделать свой кодировщик. Это всего лишь наработка — если она Вам не нравиться — никто не заставляет ее использовать.
Перекодировка из OEM-866 в Windows-1251
dp0\log.txt 2>>&1
понятно после завершения батника в этом логе досовские крокозябры
поэтому в конце батника пишу перекодировку этого лога так:
он создает этот второй лог но записывает туда только одну первую строку
как заставить его дочитать до конца, поигралась с параметром delims тоже не получилось
Добавлено через 14 минут
ответ нашла сама, как обычно
delims=-1 или delims=0 — это символы, обозначающие конец документа
только вот батник у меня большой, лог большой, приходится еще минут 10 ждать когда он перекодит, может есть у кого мысли как заставить его перекодировать сразу из потока вывода результов и записать уже в log.txt в кодировке chcp 1251 что-то вместо этого 1>>%
Вывод текста в кодировке Win-1251 из bat-файла, текст которого в кодировке OEM-866
примем за аксиому утверждение: «bat-скрипт следует создавать в кодировке DOS (OEM-866)» . пусть.
Перекодировка текста из OEM 866 в UTF-8 или Ansi с загрузкой в Memo
Всем привет! Помогите пожалуйста. У меня в исходниках есть текстовые файлы в кодировке OEM 866.
866-MS-DOS to 1251-MS-Windows
«Программа предназначена для перекодировки текстовых файлов из формата кодовой таблицы 866-MS-DOS в.
Перекодировка из КОИ-8 в Windows 1251
Разработать программу перекодировки текстовых файлов из кодового набора КОИ-8 в кодовый набор.
Вы неверно толкуете. Каждый символ после = является самостоятельным. Так нельзя писать.
Там по ссылке Charles Kludge, в п.3. при желании есть ускоренный аналог Вашего варианта перекодировщика.
Учтите, что строки, которые начинаются со знака ; будут пропускаться.
Для этого нужно добавить пустой модификатор eol=
Добавлено через 8 часов 56 минут
Или так:
Из «неправильной» переменной в файл
@echo off
set text=╧ЁштхЄ шч Ёы√ър.
(
for /f «tokens=* delims= » %%a in («%text%») do call :convert %%a
)>»%USERPROFILE%\Desktop\Translation.txt»
pause
goto :eof
:convert
::chcp 866>nul
set /p=%* nul
goto :eof
Добавлено через 3 минуты
Наверное, это тот случай когда нужно выкладывать более полный код. Сам батник изначально в кодировке 866
======================================================
:: Оставь эту строку, как распознаватель для открытия файла в редакторах
chcp 866
@echo off
set text=╧ЁштхЄ шч Ёы√ър.
(
for /f «tokens=* delims= » %%a in («%text%») do call :convert %%a
)>»%USERPROFILE%\Desktop\Translation.txt»
pause
goto :eof
:convert
::chcp 866>nul
set /p=%* nul
goto :eof
Добавлено через 3 часа 11 минут
Что то в моём более раннем ответе, на деле не то оказалось. Не знаю, как удалить предыдущее.
Вот это работает. Выводит текст ╧ЁштхЄ шч Ёы√ър. , в кодировке 1251, который так отображается в батнике, настроенном на кодировку 866, в тектовый файл 866.txt , в кодировке 1251.
В текстовом файле уже будет русский текст, разумеется.
Русский текст в консоли
мы получим «абракадабру»:
Почему так происходит?
Консоль работает в кодировке DOS (codepage 866).
Блокнот Windows создает пакетный файл в кодировке WIN (codepage 1251).
Поэтому, когда Вы запускаете файл, консоль отображает его в своей (DOS) кодировке.
1 способ (сохранение файла в кодировке OEM-866):
Скачаем текстовый редактор, поддерживающий сохранение текста в кодировке OEM-866 (DOS) :
Чтобы создать новый файл в кодировке DOS:
Меню «Файл» -> «Сохранить как. » -> из выпадающего списка выбрать «Кодировка OEM-866«.
Файл должен иметь расширение bat или cmd.
Для себя я настроил AkelPad так, чтобы он всегда сохранял в кодировке OEM-866 (Настройки -> Параметры -> Кодировка по-умолчанию -> OEM-866.)
Скачать.
Сам пользуюсь вот такой модификацией что и Вам советую. Скачать.
Или качаем с официального сайта.
Чтобы правильно сконвертировать уже имеющийся в редакторе код с кириллицей :
Войти в редактор.
1) Ctrl+A, скопировать код.
2) Удалить код.
3) Меню «Кодировки» -> выбрать «Сохранить в DOS-866«.
4) Вставить код.
5) Сохранить, запустить.
Полезные горячие комбинации клавиш:
Запуск скрипта (Ctrl + F5)
На весь экран (F11)
Сохранить (Ctrl + S)
Открыть в кодировке WIN (Alt + W)
Открыть в кодировке DOS (Alt + D)
Чтобы создать новый файл в кодировке DOS:
Меню «Кодировки» -> «Кодировки» -> «Кириллица» -> «OEM-866»
«Файл» -> «Сохранить как. » -> пишем имя файла и расширение bat или cmd -> Сохранить.
Чтобы правильно сконвертировать уже имеющийся в редакторе код с кириллицей :
Войти в редактор.
1) Ctrl+A, скопировать код.
2) Удалить код.
3) Меню «Кодировки» -> «Кодировки» -> «Кириллица» -> «OEM-866»
4) Вставить код.
5) Сохранить, запустить.
Помните: в редакторе не должно быть видно «крякозябер», иначе это значит: Вы неправильно скопировали код.
В Windows Vista, 7 часто бывает, что код с форума «портиться» в буфере. Выход: когда копируете код, убедитесь, что включена русская раскладка клавиш.
2 способ (смена кодовой страницы):
Сменить кодовую страницу консоли.
А именно, в начале пакетного файла написать:
Преобразовать текст из кодировки Win1251 в DOS-866
С помощью этого кода приложение на этапе создания формы, в данном случае, что очевидно, создает bat файл и записывает в него следующие строки:
Перекодировать введенный текст из кодировки cp866 в win1251
Как перекодировать введенный текст из кодировки cp866 в win1251? Какие функции есть? Мои идея.
Кодировки win1251-UTF8
Подскажите как осуществить сиё действие? К примеру имею $mytext=’Яндекс ‘; //Яндекс зы.
Перевод кодировки в Win1251/UTF8
Вместо русского «Яндекс» пишутся такие кракозябры «Ð¯Ð½Ð´ÐµÐºÑ» как поменять.
Насколько же все это проще в Паскале, где нет ничего кроме своего мозга
В результате Еррор: incompatible types: ‘String’ and ‘PAnsiChar’
Что я делаю не так?
Добавлено через 57 минут
Я также пробовал играть преобразованием переменных, сводить их к одному виду и тогда сообщение Not enough actual parameters. То есть я не могу победить. Спасите, помогите.
данная функция отрабатывает, но возвращает неверный результат: К примеру запись WinToDos(‘»Э»‘) вернет «ж» в кодировке OEM866
Я уже замучался гуглить, если честно, чтобы решить такую банальную проблему, превратить русский текст из Delphi 2010 в русский текст в кодировке OEM866
makc9I, начиная с Delphi 2009 проблема перевода кодировок решается вот так:
функция отработала, но теперь получаю null на выходе при попытке перевести любой символ, если просматривать в notepad++
Добавлено через 5 минут
UI, спасибо, буду пробовать ваш метод, если другого решения не найду.
Просто я уже написал код со старым добрым AssignFile, writeln, присвоил куче переменных данные, предварительно их обработав функцией перевода(неработающей) в кодировку OEM866, гораздо проще было бы найти рабочую функцию, конечно. Но если не найду, буду переписывать код, что ж делать.
Добавлено через 12 минут
Это тебе не Паскаль.
Добрый день, может я не внимательно прочитал или не так понял. Вы хотите чтобы код в созданном Бат файле работал в с директориями, в которых встречаются русские символы?
К примеру при выполнении батника:
del C:\folder\project\project1.exe — работает
,а
del C:\folder\Мои программы\project1.exe — НЕ работает
я правильно понял?
потом еще дополнительно прогонял через StrOemToAnsi
Но закоментировав все эти действия, пришел к выводу, что это все уже и не нужно, в файл все стало писаться как надо.
Добавлено через 43 минуты
поторопился я с выводами, не в тот файл посмотрел, все же надо проделать все процедуры, описанные выше. Но результата добился, спасибо
Да — Query.FieldByName(‘C’).AsAnsiString вернёт данные из DBF «как есть» — т. е., это будут строки однобайтных символов в кодировке CP866. Чтобы получить Windows ANSI кодировку (ANSI RU — CP1251), надо выполнить преобразование CP866 -> CP1251 через StrOemToAnsi(), например.
Кстати, при показе данных через DBGrid, кодировки автоматически преобразуются и в DBGrid тексты верно показываются. Но если строки читаются из набора данных через свойство AsAnsiString — то мы уже получаем данные, как уже говорилось, в том виде, в каком они присутствуют в БД.
Добавлено через 1 час 40 минут
Ralik,
Преобразование из одного кода в другой элементарно сделать и самому.
Для этого зайдите в википедею и выдерите таблицу с кодировками.
На основе этого составьте массив. В нём всего то 256 элементов.
Индекс массива — код в Win1251 содержимое — код DOS-866
А далее дело техники Пишем элементарную функцию
Предположим у вас массив Сod
И. читаем символ из строки SS
Вот и всё. В одну строчку
Сделайте массив двухмерным и добавьте коды Win1251 где индексы — код DOS-866 И вы сможете делать обратное преобразование.
Можете даже написать функцию и при этом сократить массив. учитывая что вся котовасия начинается после индекса 127
Если больше 127 то делаем преобразование, иначе игнорируем.
Вот так — одна — три строчки кода и всё преобразование.
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Изменение кодировки Win1251 в UTF8 (необычный случай)
Всем привет! . обычно кодировка проблем не доставляла, а вот недавно столкнулся с проблемой.
DOS-866 в Unicode (UTF-8)
Замаялся с кодировками. в файле данные в Unicode (UTF-8) у меня в консольнмо приложении в DOS-866.
866-MS-DOS to 1251-MS-Windows
«Программа предназначена для перекодировки текстовых файлов из формата кодовой таблицы 866-MS-DOS в.
В чём отличия кодировки ms dos от кодировки ms windows?
Всем привет, подскажите в чём отличия кодировки ms dos от кодировки ms windows?
Проблема с текстовым файлом (DOS 866)
Я собираю строку текстового файла и формирую ее согласно ниже приведенной декларации. .
Драйвер перекодировки символов в тексте таблицы win-1251 в dos-866
Вот есть тз : Legasy драйвер для ОС win NT. входной и выходной текст передается х драйвера с.
Настройка кодировки шрифтов в cmd/bat (иероглифы, кракозябры)
В некоторых случаях, когда используется неверная кодировка, могут возникать так называемые кракозябры или иероглифы, т.е. не читаемые символы, которые невозможно разобрать при работе с командной строкой. Эти проблемы могут также возникать и при запуске различных BAT-файлов. В данной статье мы расскажем о том, как можно сменить шрифт или кодировку, чтобы избавиться от этой проблемы. Пример таких не читаемых символов можно видеть на картинке ниже:
Исправляем проблему с кодировкой с помощью смены шрифта
Первым делом нужно зайти в свойства окна: Правой кнопкой щелкнуть по верхней части окна -> Свойства -> в открывшемся окне в поле Шрифт выбрать Lucida Console и нажать кнопку ОК.
После этого не читаемые символы должны исчезнуть, а текст должен выводиться на русском языке.
Исправляем проблему с кодировкой с помощью смены кодировки
Вместо смены шрифта, можно сменить кодировку, которая используется при работе cmd.exe.
Узнать текущую кодировку можно введя в командной строке команду chcp , после ввода данной команды необходимо нажать Enter .
Как видно на скриншоте, текущая используемая кодировка Windows-1251
Для изменения кодировки нам необходимо воспользоваться командой chcp , где — это сам код кодировки, на которую мы хотим переключиться. Возможные значения:
- 1251 — Windows-кодировка (Кириллица);
- 866 — DOS-кодировка;
- 65001 — Кодировка UTF-8;
Т.е. для смены кодировки на DOS, команда примет следующий вид:
Для смены кодировки на UTF-8, команда примет следующий вид:
Для смены кодировки на Windows-1251, команда примет следующий вид: