Кодировки и Юникод¶
Простейшая кодировка текста (называемая или )
сопоставляет кодовые точки 0–255 с байтами — , что означает,
что строковый объект, содержащий кодовые точки выше , не может быть
закодирован с помощью этой кодировки. Вызовет ,
который выглядит следующим образом (хотя подробности сообщения об ошибке могут
отличаться): .
Есть ещё одна группа кодировок (так называемые кодировки charmap), которые
выбирают другое подмножество всех кодовых точек Юникод и то, как эти кодовые
точки отображаются в байты — . Чтобы увидеть, как это
делается, просто откройте, например, (кодировка,
которая используется в основном в Windows). Существует строковая константа из
256 символов, которая показывает, какой символ сопоставлен с каким значением
байта.
Все эти кодировки могут кодировать только 256 из 1114112 кодовых точек,
определенных в Юникоде. Простой и понятный способ сохранить каждую кодовую Юникод
точку — это сохранить каждую кодовую точку как четыре последовательных
байта. Есть две возможности: хранить байты в прямом или обратном порядке. Эти
две кодировки называются и соответственно. Их
недостаток в том, что если, например, вы используете на машине с
прямым порядком байтов, вам всегда придется менять байты местами при
кодировании и декодировании. позволяет избежать этой проблемы: у байтов
всегда будет естественный порядок следования байтов. Когда эти байты
читаются ЦПУ с другим порядком байтов, тогда байты необходимо поменять местами.
Чтобы была возможность определять порядок байтов последовательности байтов
или , существует так называемая BOM («Метка порядка
байтов»). Это символ Юникода . Этот символ может быть добавлен к
каждой последовательности байтов или . Версия этого
символа с перестановкой байтов () является недопустимым символом,
который может отсутствовать в тексте Юникод. Поэтому, когда первый символ в
байтовой последовательности или оказывается ,
байты должны быть поменяны местами при декодировании. К сожалению, у символа
была вторая цель как : символ, у которого
нет ширины и не позволяет разделить слово. Это может, например,
использоваться для подсказки алгоритма лигатуры. В Юникод 4.0 использование
в качестве устарело (с
(), принимающим на себя эту роль). Тем не менее, Юникод
программное обеспечение всё ещё должно уметь обрабатывать в обеих ролях:
как спецификация это устройство для определения структуры хранения
закодированных байтов и исчезает после того, как последовательность байтов была
декодирована в строку; как это обычный символ,
который будет декодирован, как и любой другой.
Есть ещё одна кодировка, которая может кодировать весь диапазон символов
Юникод: UTF-8. UTF-8 — это 8-битная кодировка, что означает, что в UTF-8 нет
проблем с порядком байтов. Каждый байт в байтовой последовательности UTF-8
состоит из двух частей: битов маркера (старшие биты) и битов полезной нагрузки.
Биты маркера представляют собой последовательность от нуля до четырех битов
, за которыми следует бит . Символы Юникод кодируются следующим
образом (где x — это биты полезной нагрузки, которые при объединении дают
символ Юникод):
Диапазон | Кодировка |
---|---|
… | 0xxxxxxx |
… | 110xxxxx 10xxxxxx |
… | 1110xxxx 10xxxxxx 10xxxxxx |
… | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Наименьший значащий бит символа Юникода — это крайний правый бит x.
Поскольку UTF-8 представляет собой 8-битную кодировку, спецификация не
требуется, и любой символ в декодированной строке (даже если это
первый символ) обрабатывается как .
Без внешней информации невозможно достоверно определить, какая кодировка
использовалась для кодирования строки. Каждая кодировка charmap может
декодировать любую случайную последовательность байтов. Однако это невозможно с
UTF-8, поскольку у байтовых последовательностей UTF-8 структура, которая не
допускает произвольных байтовых последовательностей. Чтобы повысить надежность,
с которой может быть обнаружена кодировка UTF-8, Microsoft изобрела вариант
UTF-8 (который Python 2.5 называет ) для своей программы
Notepad: перед тем, как любой из символов Юникод будет записан в файл, UTF-
записывается 8 закодированная BOM (которая выглядит как последовательность
байтов: , , ). Поскольку маловероятно, что какой-либо
файл с кодировкой charmap начинается с этих байтовых значений (которые,
например, сопоставляются с
Способ 3: FoxTools
FoxTools — еще один онлайн-сервис, основное предназначение которого заключается в декодировании текста, однако его функциональность можно использовать и для определения необходимого символьного набора, что происходит так:
- Активируйте поле для ввода и вставьте туда скопированную ранее надпись.
Снизу поля «Исходная кодировка» вы найдете кнопку «Определить», по которой и следует нажать для запуска процесса распознавания.
Если параллельно осуществляется перевод в читаемый вид, выберите его из выпадающего меню сверху.
Нажмите «Отправить», чтобы получить результат со всей необходимой информацией.
Ознакомьтесь с параметром возле пункта «Исходная кодировка» для определения символьного набора. Если он отображен не в кодовом названии, найдите перевод через Википедию для общего понимания.
Иногда FoxTools не распознает редко используемые кодировки, поэтому потребуется переключиться в режим «Все кодировки» и повторить процедуру подбора.
Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.
Универсальный декодер
Сервис отлично справляется с кириллицей. Очень популярен среди юзеров рунета. Если вы выбрали его для работы, то необходимо сделать копию текста, нуждающегося в декодировании и вставить в специальное поле. Следует размещать отрывок так, чтобы уже на первой строчке были непонятные знаки.
Если вы хотите, чтобы ресурс автоматически смог раскодировать, придется отметить это в списке выбора. Но можно выполнять и ручную настройку, указав выбранный тип. Итоги можете найти в разделе «Результат». Вот только тут есть определенные ограничения. К примеру, если в поле вставить отрывок более 100 Кб, софт не обработает его, так что нужно будет выбирать кусочки.
Почему у iostream нет расширения .h?
Другой часто задаваемый вопрос: «Почему iostream (или любой другой заголовочный файл стандартной библиотеки) не имеет расширения .h?». Ответ заключается в том, что iostream.h – это другой заголовочный файл, отличающийся от iostream! Для объяснения требуется небольшой урок истории.
Когда C++ был только создан, все файлы в стандартной библиотеке оканчивались расширением .h. Жизнь была последовательной, и это было хорошо. Исходные версии и были объявлены в iostream.h. Когда комитет ANSI стандартизировал язык, они решили переместить все функции стандартной библиотеки в пространство имен , чтобы избежать конфликтов имен с пользовательскими идентификаторами. Однако это представляло проблему: если бы они переместили всю функциональность в пространство имен , ни одна из старых программ (включая iostream.h) больше не работала бы!
Чтобы обойти эту проблему, был представлен новый набор заголовочных файлов, которые используют те же имена, но не имеют расширения .h. Все функции в этих новых заголовочных файлах находятся в пространстве имен . Таким образом, старые программы, содержащие , не нужно переписывать, а новые программы могут использовать .
Кроме того, многие библиотеки, унаследованные от C, которые всё еще используются в C++, получили префикс c (например, stdlib.h стал cstdlib). Функциональные возможности этих библиотек также были перенесены в пространство имен , чтобы избежать конфликтов имен.
Лучшая практика
При включении заголовочного файла из стандартной библиотеки используйте версию без расширения (без .h), если она существует. Пользовательские заголовочные файлы по-прежнему должны использовать расширение .h.
Кодировки стандарта ASCII[править]
Определение: |
ASCII — таблицы кодировок, в которых содержатся основные символы (английский алфавит, цифры, знаки препинания, символы национальных алфавитов(свои для каждого региона), служебные символы) и длина кода каждого символа бит. |
бит:
ASCII7 — первая кодировка, пригодная для работы с текстом. Помимо маленьких букв английского алфавита и служебных символов, содержит большие буквы английского языка, цифры, знаки препинания и другие символы.
Кодировки стандарта ASCII ( бит):
- ASCII — первая кодировка, в которой стало возможно использовать символы национальных алфавитов.
- КОИ8-R — первая русская кодировка. Символы кириллицы расположены не в алфавитном порядке. Их разместили в верхнюю половину таблицы так, чтобы позиции кириллических символов соответствовали их фонетическим аналогам в английском алфавите. Это значит, что даже при потере старшего бита каждого символа, например, при проходе через устаревший семибитный модем, текст остается «читаемым».
- CP866 — русская кодировка, использовавшаяся на компьютерах IBM в системе DOS.
- Windows-1251 — русская кодировка, использовавшаяся в русскоязычных версиях операционной системы Windows в начале 90-х годов. Кириллические символы идут в алфавитном порядке. Содержит все символы, встречающиеся в типографике обычного текста (кроме знака ударения).
Структурные свойства таблицыправить
- Цифры 0-9 представляются своими двоичными значениями (например, ), перед которыми стоит . Таким образом, двоично-десятичные числа (BCD) превращаются в ASCII-строку с помощью простого добавления слева к каждому двоично-десятичному полубайту.
- Буквы A-Z верхнего и нижнего регистров различаются в своём представлении только одним битом, что упрощает преобразование регистра и проверку на диапазон. Буквы представляются своими порядковыми номерами в алфавите, записанными в двоичной системе счисления, перед которыми стоит (для букв верхнего регистра) или (для букв нижнего регистра).
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | TAB | LF | VT | FF | CR | SO | SI | |
1 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US |
2 | ! | » | # | $ | % | & | ‘ | ( | ) | * | + | , | — | . | ||
3 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ; | < | = | > | ? | ||
4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O |
5 | P | Q | R | S | T | U | V | W | X | Y | Z | \ | ^ | _ | ||
6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o |
7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL |
Смена кодировки в Word
Если Ворд был установлен не так давно, возможно, он еще не ассоциирован с нужным типом файлов. Это значит, что в открывшемся меню варианта с Microsoft Word просто не будет. Тогда сделайте по-другому:
- Скачайте и установите ворд. Если вы не планируете его использовать постоянно, то можно не покупать лицензию, вполне хватит и пробного релиза;
- Откройте папку, в которой расположен файл с неправильной кодировкой;
- Нажмите по нему правой клавишей мыши;
- Из контекстного меню выберите «Открыть с помощью Microsoft Word»;
- Откройте Ворд;
- Нажмите меню «Файл» и выберите документ с неправильным кодом;
- Укажите режим открытия файла (выбор обязательно будет предложен, если кодировка не является стандартной для Виндовс);
- Щелкните «ОК».
- Открыв файл с помощью ворда (или в ворде), выберите меню «Файл»;
- Нажмите «Сохранить как…» и укажите, куда помещать документ с правильной кодировкой;
- Укажите имя и щелкните кнопку «Сохранить»;
- В открывшемся окне атрибутов установите требуемую кодировку (самая универсальная — «Юникод»).
Если вы сохраняете файл в ту же директорию, где расположен исходный документ, и при этом не поменяете его имя, файл с неправильной кодировкой будет удален насовсем (восстановить через «Корзину» не получится).
Если вы используете версию Ворд от 2007 года или более позднюю, то лучше сохранять файл не в docx-формате, а в формате .doc. Он более универсальный, так как читается на любой версии Ворда. Формат docx – достаточно новый, его не понимают старые релизы программы, да и других приложений, работающих с ним, не так много. Кстати, о версиях Ворда: чем она свежее, тем больше нестандартных кодировок распознает.
Обработка «Распознавание штрихкода с помощью утилиты Zbar» для Документооборот ред. 2 Промо
В связи с тем, что стандартный функционал программы «Документооборот» ред. 2.1 дает возможность распознавания штрихкодов только форма EAN-13, данная обработка — альтернативный способ для распознавания штрихкода в программе 1С: Документооборот ред. 2 с помощью утилиты Zbar, которая распознает в том числе и в формате Code 128 (один из стандартных штрихкодов кодирования документов, например, «Управление торговлей» ред. 11), а также с возможностью поэтапно проследить все действия от распознавания до прикрепления к документу или простой загрузки в каталоги файлов в базе 1С.
5 стартмани
Конвертировать DBF в TXT онлайн, бесплатное изменение .dbf в .txt
Расширение файла .dbf
Категория файла документы
Описание Dbase, программное обеспечение для управления базами данных, использует расширение DBF для хранения своих стандартных файлов базы данных.Однако dbase — не единственная программа для работы с базами данных, совместимая с файлами DBF, поскольку другие программы «xBASE» также поддерживают этот формат файла. DBF приобрел популярность, потому что его структура проста для понимания, а также ранее была принята сообществом баз данных.
Технические характеристики DBF-файл содержит несколько наборов данных, которые хранятся и организованы в массивы. Он используется в dBASE II как формат файла.Кроме того, он использовался в следующих версиях dBASE III, III + и IV. DBF-файл — один из самых ранних файлов базы данных, имеющих заголовок. Заголовок делает программу незнакомой со структурой данных прочитанного DBF файла. Однако его можно использовать в Microsoft Excel OpenOffice Calc и некоторых других программах.
Программы
Microsoft Access 2016
Microsoft Excel 2016
Microsoft Visual FoxPro
Corel Quattro Pro X7
Apache OpenOffice
HiBase Group DBF Viewer 2000
Astersoft DBF Manager
Просмотрщик DBF Plus
DBFView
Закон о Swiftpage!
Alpha Программное обеспечение Alpha Anywhere
Planamesa NeoOffice (Mac)
GTK DBF редактор (Mac и Linux)
мультисофт FlagShip (Linux)
Основная программа дБase
Разработчик дБASE
Работа с картами 1С 4 в 1: Яндекс, Google , 2ГИС, OpenStreetMap(OpenLayers) Промо
С каждым годом становится все очевидно, что использование онлайн-сервисов намного упрощает жизнь. К сожалению по картографическим сервисам условия пока жестковаты. Но, ориентируясь на будущее, я решил показать возможности API выше указанных сервисов:
Инициализация карты
Поиск адреса на карте с текстовым представлением
Геокодинг
Обратная поиск адреса по ее координатами
Взаимодействие с картами — прием координат установленного на карте метки
Построение маршрутов по указанным точками
Кластеризация меток на карте при увеличении масштаба
Теперь также поддержка тонкого и веб-клиента
1 стартмани
GIS-Lab: Изменение кодировки DBF файла
Описание использования библиотеки dbfpy для изменения кодировки данных и скрипт.
Неотъемлемой частью данных в формате shape является атрибутивная таблица в формате DBF. Атрибутивные данные могут храниться в разных кодировках, часто встречаются такие кодировки как Windows-1251 (CP1251) и UTF8, KOI8-R. Некоторое, особенно относительно давно появившиеся ГИС, такие как Arcview GIS 3.x, некоторые версии Mapinfo, не умеют работать с более новой кодировкой UTF8. Соответственно, часто встречается задача перевода DBF из одной кодировки в другую.
Для преобразования dbf из одной кодировки в другую можно использовать скрипт на языке Python (скачать скрипт). Эта статья описывает подготовку к работе, идею скрипта и как с ним работать.
Подготовка к работе
Для работы скрипта необходимо иметь Python 2.5/2.6 и один раз скачать и установить библиотеку dbfpy. После загрузки библиотеки нужно выполнить:
python setup.py install
Правильность установки библиотеки можно проверить запустив Python и выполнив:
Если все установлено нормально, ошибок эта команда выдать не должна.
Идея
В процессе работы, наш скрипт должен построчно проверять тип поля в исходном файле DBF и, если он строковый, т.е. есть вероятность того, что данные не в той кодировке, что нужно, осуществлять преобразование. Упрощенная версия скрипта на языке Python для перевода данных из кодировки в кодироввку выглядит следующим образом:
#!/usr/bin/python #--*-- encoding: utf-8 --*-- import sys from dbfpy import dbf from types import * db = dbf.Dbf(sys.argv) newDB=dbf.Dbf(sys.argv, new=True) for f in db.header.fields: newDB.addField(f) for rec in db: r=newDB.newRecord() newData=[] for f in rec.fieldData: if type(f)==StringType: f=unicode(f,'utf-8') f=f.encode('windows-1251') newData.append(f) r.fieldData=newData r.store() db.close() newDB.close()
Использование
Утилита вызывается из командной строки и принимает несколько параметров:
python dbf-encode.py -f encin -t encout -n input output
- input — имя исходного файла dbf, который требуется преобразовать, обязателен
- output — имя конечного файла dbf, куда будет записан результат, обязателен
- -f (—from-code) — кодировка исходного DBF файла, не обязателен, по умолчанию UTF-8
- -t (—to-code) — кодировка выходного DBF файла, не обязателен, по умолчанию CP-1251
- -n (—no-subs) — переключатель, если установлен, то неизвестные символы пропускаются, если не установлен — заменяются на знаки вопроса («?»)
- -h (—help) — справка
- -v (—version) — версия программы
Пример использования
Конвертировать adygeya-admin-a.dbf в adygeya-admin-a2.dbf из кодировки UTF-8 в кодировку CP-1251.
python dbf-encode.py -f UTF8 -t CP1251 adygeya-admin-a.dbf adygeya-admin-a2.dbf
или упрощенная запись параметров командной строки (эти кодировки и так являются кодировками на входе и выходе по умолчанию):
python dbf-encode.py adygeya-admin-a.dbf adygeya-admin-a2.dbf
Ошибки конвертации
Если конвертер сталкивается с символом, который не может перекодировать, он по-умолчанию заменяет его на вопросительный знак («?»), если к строке запуска добавлен —no-subs (-n), то символ пропускается.
Если возникает другая ошибка при конвертации, конвертер выводит содержание записи на которой возникла ошибка в консоль и прекращает работу. Конечный файл создается неполным и для подмены оригинального в shape-файле непригоден.
Ошибка invalid syntax может быть связана с неправильным запуском скрипта, под Windows запуск нужно осуществлять из командного процессора («Пуск → Выполнить → cmd») после чего вводить команду указанную выше.
Скачать полную версию dbf-encode.py
Понимание Схем Кодирования
Кодировка символов может принимать различные формы в зависимости от количества символов, которые она кодирует.
Количество закодированных символов имеет прямое отношение к длине каждого представления, которое обычно измеряется как количество байтов. Наличие большего количества символов для кодирования по существу означает необходимость более длинных двоичных представлений.
Давайте рассмотрим некоторые из популярных схем кодирования на практике сегодня.
4.1. Однобайтовое кодирование
Одна из самых ранних схем кодирования, называемая ASCII (Американский стандартный код для обмена информацией), использует однобайтовую схему кодирования. По сути, это означает, что каждый символ в ASCII представлен семибитными двоичными числами. Это все еще оставляет один бит свободным в каждом байте!
Ascii 128-символьный набор охватывает английские алфавиты в нижнем и верхнем регистрах, цифры и некоторые специальные и контрольные символы.
Давайте определим простой метод в Java для отображения двоичного представления символа в определенной схеме кодирования:
String convertToBinary(String input, String encoding) throws UnsupportedEncodingException { byte[] encoded_input = Charset.forName(encoding) .encode(input) .array(); return IntStream.range(0, encoded_input.length) .map(i -> encoded_input) .mapToObj(e -> Integer.toBinaryString(e ^ 255)) .map(e -> String.format("%1$" + Byte.SIZE + "s", e).replace(" ", "0")) .collect(Collectors.joining(" ")); }
Теперь символ ” T ” имеет кодовую точку 84 в US-ASCII (ASCII в Java называется US-ASCII).
И если мы используем наш метод утилиты, мы можем увидеть его двоичное представление:
assertEquals(convertToBinary("T", "US-ASCII"), "01010100");
Это, как мы и ожидали, семиразрядное двоичное представление символа “T”.
Исходный ASCII оставил самый значимый бит каждого байта неиспользованным. В то же время ASCII оставил довольно много непредставленных символов,
Исходный ASCII оставил самый значимый бит каждого байта неиспользованным. || В то же время ASCII оставил довольно много непредставленных символов,
Было предложено и принято несколько вариантов схемы кодирования ASCII.
Многие расширения ASCII имели разные уровни успеха, но, очевидно, это
Одним из наиболее популярных расширений ASCII был ISO-8859-1 , также называемый “ISO Latin 1”.
4.2. Многобайтовое кодирование
Поскольку потребность в размещении все большего количества символов росла, однобайтовые схемы кодирования, такие как ASCII, не были устойчивыми.
Это привело к появлению многобайтовых схем кодирования, которые имеют гораздо большую емкость, хотя и за счет увеличения требований к пространству.
BIG 5 и SHIFT-JIS являются примерами многобайтовых схем кодирования символов, которые начали использовать как один, так и два байта для представления более широких наборов символов . Большинство из них были созданы для того, чтобы представлять китайские и аналогичные сценарии, которые имеют значительно большее количество символов.
Давайте теперь вызовем метод convertToBinary с вводом как “語”, китайский символ, и кодирование как “Big5”:
assertEquals(convertToBinary("語", "Big5"), "10111011 01111001");
Вывод выше показывает, что кодировка Big5 использует два байта для представления символа “語”.
полный список кодировок символов, наряду с их псевдонимами, ведется Международным органом по номерам.
Когда нужны пояснения в коде, а когда — нет
Бывает, что одних документирующих комментариев недостаточно и нужно добавить пояснения внутри процедур или функций. Такие комментарии облегчают понимание кода — рассказывают, почему автор программы сделал что-то так, а не иначе.
Но иногда эти пояснения только ухудшают наглядность кода, бывают бессмысленны и даже вредны. Например, совершенно не нужны комментарии, просто пересказывающие действия программы:
Если вы вставили промежуточные комментарии для отладки или объяснения результатов, после окончания работы их нужно убрать. Иначе они будут захламлять код.
Например, функция вычисляет окончательную сумму, прибавляя проценты к основной. Для проверки программист вывел на экран промежуточный результат, а после закомментировал ненужный фрагмент.
После отладки их лучше удалить, оставив строки:
Простой код, без многочисленных циклов, ветвлений и переходов, пишут и структурируют так, чтобы никаких дополнительных пояснений к нему не требовалось.
Но бывают исключения. Допустим, разработчик попробовал несколько вариантов решения и выбрал один, не самый очевидный. Потом забыл ход своих мыслей, открыл код и решил использовать «более правильный и оптимальный вариант». И тут он понимает, что новое решение хуже старого; более того, раньше он уже это пробовал делать. Приходится откатывать всё назад. Чтобы не попасть в такую ситуацию, пишите поясняющие комментарии.
Пример на языке JavaScript:
Здесь и сам метод Number.isFinite (), и глобальная функция isFinite () проверяют, является ли параметр value конечным числом (то есть не ± ∞). Но если value = null, то isFinite (value) возвращает true, а Number.isFinite (value) возвращает false. Поэтому Number.isFinite (value) нельзя менять на isFinite (value).
Обязательно комментируйте код, если в нём есть какие-то тонкости и неочевидные вещи. Например:
Это неудачный комментарий: непонятно, зачем количество умножать на 2.
Правильно будет так:
Как работать с кодировкой dbf файла? — Алексей Лукин aka Arcon
DBF-файлы весьма распространены в государственном секторе. Их активно используют для переноса данных из одной базы данных в другую. Все, казалось бы, хорошо, но есть один неприятный момент. Какой? Кодировка!
Как часто приходится ломать голову из-за этих кодировок. Но ничего не поделаешь, приходится с этой неприятностью как-то справляться. Итак, что же нам делать, если мы делаем свое приложение, для работы с dbf файлом и возникли трудности с кодировкой?
В dbf файле за кодовую страницу отвечает 29-й байт. Например, значение 101 означает кодовую страницу DOS-866, 201 — Windows-1251, а значение 0 указывает, что нужно использовать системные настройки. Зная это, можно умело манипулировать кодировкой при импорте и экспорте dbf. Выставить нужную кодировку при создании файла или если кодировка содержимого не соответствует кодировке кодовой страницы, то мы легко можем менять последнюю путем записи нужного числа в 29 байт. Приведенный ниже код это демонстрирует.
FileStream fs = new FileStream(path, FileMode.Open); fs.Seek(29, SeekOrigin.Begin); fs.WriteByte(201); fs.Close();
Примерно таким образом мы можем и считать байт и привести его к числу, для удобства, чтобы знать, какая кодовая страница у файла.
Все, казалось бы, хорошо, вот только при подключении через Microsoft Jet Database Engine, упорно игнорируется кодовая страница. Кодировка берется из реестра, параметр DataCodePage. Найти этот параметр можно в следующих ветках реестра:
- ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.0\Engines\Xbase’
- ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Xbase’
- ‘HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Xbase’
Если при чтении dbf мы можем конвертировать данные непосредственно в нашем приложении, то при экспорте без манипуляции со значением параметра DataCodePage никак не обойтись. По сути нам надо запомнить, что при значении «OEM» работа проходит при DOS кодировке, а при значении «ANSI» — в Windows. Если всегда экспорт должен проходить в одной кодировке, то можно сразу один раз ее выставить и забыть. Иначе нам придется перед каждой операцией менять значение реестра. Но таким образом наши пользователи всегда будут получать данные в понятном и нужном им виде.
Комментарии в сложном коде и рефакторинг
В сложной и запутанной программе не обойтись без поясняющих комментариев. Но иногда лучше упростить сам код: разбить на отдельные функции, уменьшить размеры элементов, упростить циклы и так далее. А самим функциям, константам и переменным дать «говорящие» имена, объясняющие их назначение.
Например, есть метод, который сравнивает числа a и b. Если a > b, он возвращает true, a если a < b — false:
Весь этот громоздкий кусок кода можно значительно упростить, просто убрав блок if-else:
Теперь метод выглядит намного проще и элегантнее, хотя его суть не изменилась. Подобные преобразования называются рефакторингом.
Навигатор по конфигурации базы 1С 8.3 Промо
Универсальная внешняя обработка для просмотра метаданных конфигураций баз 1С 8.3.
Отображает свойства и реквизиты объектов конфигурации, их количество, основные права доступа и т.д.
Отображаемые характеристики объектов: свойства, реквизиты, стандартные рекизиты, реквизиты табличных частей, предопределенные данные, регистраторы для регистров, движения для документов, команды, чужие команды, подписки на события, подсистемы.
Отображает структуру хранения объектов базы данных, для регистров доступен сервис «Управление итогами».
Платформа 8.3, управляемые формы. Версия 1.1.0.87 от 02.12.2021
3 стартмани
Основы
Однако, прежде чем копать глубже, давайте быстро рассмотрим три термина: кодировка , кодировка и кодовая точка .
3.1. Кодирование
Компьютеры могут понимать только двоичные представления, такие как 1 и . Обработка всего остального требует некоторого сопоставления текста реального мира с его двоичным представлением. Это отображение-то, что мы знаем как кодировка символов или просто как кодировка .
Например, первая буква в нашем сообщении, “T”, в US-ASCII кодирует в “01010100”.
3.2. Кодировки
Сопоставление символов с их двоичными представлениями может сильно различаться с точки зрения символов, которые они включают. Количество символов, включенных в сопоставление, может варьироваться от нескольких до всех символов, используемых на практике. Набор символов, включенных в определение отображения, формально называется кодировкой .
Например, ASCII имеет кодировку из 128 символов .
3.3. Кодовый пункт
Кодовая точка-это абстракция, которая отделяет символ от его фактической кодировки. A кодовая точка – это целочисленная ссылка на определенный символ.
Мы можем представить само целое число в простых десятичных или альтернативных основаниях, таких как шестнадцатеричное или восьмеричное. Мы используем альтернативные базы для удобства ссылки на большие числа.
Например, первая буква в нашем сообщении, T, в Юникоде имеет кодовую точку “U+0054” (или 84 в десятичной системе счисления).
Программы для определения кодировки в Linux
Команда file -i показывает неверную кодировку
Чтобы узнать кодировку файла используется команда file с флагами -i или —mime, которые включают вывод строки с типом MIME. Пример:
Команда file показывает кодировки, но для одного из моих файлов она неверна. Рассмотрим ещё одну альтернативу.
Программа enca для определения кодировки файла
Утилита enca определяет кодировку текстовых файлов и, если нужно, конвертирует их.
Установим программу enca:
В этот раз для обоих файлов кодировка определена верно.
Запуск команды без опции выводит что-то вроде:
Это удобно для чтения людьми. Для использования вывода программы в скриптах есть опция -e, она выводит только универсальное имя, используемое в enca:
Если вам нужно имя, которое используется для названия кодировок в iconv, то для этого воспользуйтесь опцией -i:
Для вывода предпочитаемого MIME имени кодировки используется опция -m:
Для правильного определения кодировки программе enca нужно знать язык файла. Она получает эти данные от локали. Получается, если локаль вашей системы отличается от языка документа, то программа не сможет определить кодировку.
Язык документа можно явно указать опцией -L:
Чтобы узнать список доступных языков наберите:
Что в итоге
Комментарии — отличная штука. Они помогают команде разработчиков работать над общим проектом. А если программист один, позволят ему даже через много лет вспомнить ход своих мыслей. Но комментариев должно быть мало, иначе они превратятся во флуд.
Комментировать нужно основные элементы кода, неочевидные решения, сложные бизнес-процессы, тонкости решений и тому подобное. Не пишите комментарии, объясняющие, что и как делает процедура или функция, — это бессмысленно.
И помните, что комментарий — не панацея, он не спасёт плохой код, даже если сделает его понятнее. Сложные и запутанные фрагменты сокращайте и делайте рефакторинг, а комментируйте по минимуму.