Надстройка для транслитерации (кодирования) диапазона ячеек

При запуске надстройки в Excel формируется панель инструментов, при помощи которой можно выполнять следующие действия:

  • Нажатием кнопки RU->EN выполнить транслитерацию выделенного диапазона ячеек
  • Нажатием кнопки EN->RU выполнить транслитерацию выделенного диапазона ячеек
  • В выпадающем списке «Режим работы» можно переключить режим замены символов – второй пункт выпадающего списка «Коды символов» вместо транслита включает режим замены символов их кодамиAscW (и обратный режим замены кодо исходным текстом, используя вызов функции ChrW)
  • Нажатием последних двух кнопок (галочка и крестик) можно управлять видимостью листа надстройки, на котором расположена таблица соответствия символов кириллицы и латиницы
  • Самая левая кнопка (со значком дискеты) выполняет сохранение изменений в файле надстройки, и создание её резервной копии в специально созданной папке.

Особенности работы надстройки:

1) Все формулы в обрабатываемом диапазоне заменяются значениями.

2) производится замена ТЕКСТА ячейки, а не её ЗНАЧЕНИЯ.
Таким образом, если в ячейке была формула, возвращающая логическое значение 0 (в ячейке отображается текст FALSE или ЛОЖЬ), то после обработки этой ячейки в ней окажется текст LO^ZH`)

3) Обратная транслитерация корректно работает только в режиме «Коды символов» – причина в том, что если в исходном тексте присутствуют как символы кириллицы, так и символы латиницы, то после применения функции "транслит" все кириллические символы заменяются латиницей, а латиница не изменяется. При обратном преобразовании макрос не знает, какие символы обрабатываемой ячейки до преобразования были латиницей, а какие – кириллицей, – потому заменяет ВСЮ латиницу на кириллицу.

Разницу в результатах вижно на этом скриншоте

4) Функции транслита можно применять и в ячейках листа Excel, как любые другие UDF:

Используйте для этого формулы =Translit2EN($A2;1) и =Translit2RU(F2;1), если требуется преобразование текста в коды символов,

или же формулы =Translit2EN($A2) и =Translit2RU(F2), если нужен именно транслит и обратный транслит.

(второй параметр формулы для режима «транслит» равен нулю, его можно опустить – он используется по-умолчанию)

Пример использования формул можно посмотреть в прикреплённом к статье тестовом файле Excel.

5) В таблице соответствия символов латиницы и кириллицы не должно быть повторяющихся кодов

Сейчас используется примерно такая таблица соответствия:

Почему перед некотороми из символов добавлен символ "крышечка" – станет понятно после прочтения этой статьи

(чтобы исключить проблемы с обратной транслитерацией)

6) После обработки диапазона ячеек производится автоматическое копирование этого диапазона в буфер обмена
(аналогично нажатию комбинации клавиш Ctrl + C)

7) В связи с необходимостью копирования диапазона в буфер обмена (и последующей вставки в другую программу), была отключена функция обработки выделенных несмежных диапазонов.

8) Программа обрабатывает ячейки только в используемом диапазоне листа, независимо от того, какой диапазон выделен изначально.

Т.е. вы можете выделить столбец целиком – макрос автоматически уменьшит высоту выделенной области, чтобы ограничить обрабатываемый диапазон только используемыми ячейками.

9) Программа перебирает все ячейки в цикле – поэтому обработка может работать медленно при больших диапазонах обрабатываемых данных.

При необходимости макрос можно существенно ускорить, если обрабатывать не текст ячеек, а их значения.

Комментарии

Это json_encode. Для этого нужен другой инструмент (функция):
https://excelvba.ru/code/JSON_decode

Указанный вами декодер вообще не распознаёт строку вида:
\u0410\u043a\u0442 \u043f\u043e \u0434\u0435\u043b\u0443 \u043e\u0431 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u043f\u0440\u0430\u0432\u043e\u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0438 \u043e\u0442 22.04.2019 \u2116 18810145190422907616 \u0426\u0410\u0424\u0410\u041f \u0412 \u041e\u0414\u0414 \u0413\u0418\u0411\u0414\u0414 \u0423\u041c\u0412\u0414 \u0420\u041e\u0421\u0421\u0418\u0418 \u041f\u041e \u041a\u0423\u0420\u0413\u0410\u041d\u0421\u041a\u041e\u0419

Соответственно и функция не работает. Тут должно быть unicode в utf-8

Добрый день! Необходимо конвертировать текст из ASCII (отрезанный старший бит) в Windows-1251. Каким образом можно модифицировать макрос для решения задачи?

Надо выполнить замены для всех похожих букв по всему документу
У меня на сайте есть решения только для Excel. Для word готового нет (можем сделать под заказ, или поищите готовый макрос в интернете, – вы явно не первый, кто с такой проблемой столкнулся)

Добрый день.
Парни, есть такая проблема, сам я из Казахстана, юзер пишет текст в ворде, например слово “СЛОВО”, где буква С была написана на англ.языке, а все остальное слово на русском, или есть такие слова где русский язык и казахский (с казахской клавиатуры). Теперь при проверке на плагиат выходит ошибка кодировки, программа не понимает таких слов из двух или более языков, посоветуйте пожалуйста выход из такой ситуации, слышал что можно с помощью макросов, вот только с макросами не дружу, но в целом с понятия имею.

Ребята, спасибо вам огромное !
Это просто вечные ценности !
Удачи вам.

Огромное СПАСИБО за такой функционал!
Полдня истратил, пока нашел, как же из Excel перевести данные в UTF-8.
И тут такой подарок!
Это просто супер!

Здравствуйте, подскажите как пересохранить xls файл в формат csv с кодировкой utf8 без BOM разделитель ; с именем исходного файла

Алексей, ну есть же в конце статьи отдельная функция для вашего случая.
Вызывается так:

Скажите пожалуйста,
хотелось бы на выходе получить файл в кодировке UTF-8 без BOM
вызываю так: ChangeFileCharset filename, “UTF-8”, “Windows-1251”
все нормально, но файл получается UTF-8
а хотелось бы UTF-8 без BOM
Это возможно? Если да, то как указать во втором параметре вызова функции?

Здравствуйте, Павел
В общем случае, кодировку txt файла никак не угадать (не проверить)
Можно лишь попробовать угадать, анализируя первые байты текста (правда, верно угадать можно с вероятностью, очень близкой к 100%)

Изменить кодировку без перезаписи файла — никак.
Смена кодировки текстового файла — это изменение байтового представления этого текста
(после перекодировки, файл может увеличиться или уменьшаться в размере в 2 раза)

Готовый макрос предложить не могу (ни разу подобное не делал, и кода немало получится)

Варианты решения проблемы:
1) ручная обработка, при помощи текстового редактора Notepad++
В нём можно открыть сразу кучу файлов, а потом, переключаясь между ними, смотреть текущую кодировку, и, при необходимости, перекодировать одним нажатием кнопки (см. меню Кодировки в Notepad++)

2) макрос под заказ. высылаете несколько файлов для примера, указываете, где кодировка верная, а где надо исправить, – я посмотрю, что можно сделать (если там не несколько разных кодировок, – макрос по цене обойдется около 2 т.р.)

А как 1) просто проверить кодировку текстового файла и вывести результат?
и 2) изменить ее без перезаписи всего текста?
Имеется в виду не кодировка текста, а та кодировка, которой файл помечен (для UTF-8, в частности, это два специфических сигнальных байта в начале файла, которые не отображаются как текст).
Нужно вот для чего. Обнаружилось, что если NC-файл (фактически это просто текстовый файл) для ЧПУ сохранен в кодировке, отличной от ANSI, то это вызывает зависание машины, в каком-то подлом проценте случаев. Теперь надо все файлы перепроверить и починить. А их тысячи.
Если при пересохранении в ANSI будут потеряны какие-то буквы – не страшно. Эти неанглийские буквы попадаются там только в комментариях к коду. Никто не знал о такой засаде и писали как попало.

У меня почему-то при кодировании анси в уникод, не прокатил параметр “utf-8”, а получилось только с “Unicode”.

ASC (строковое значение) – применяется для получения числового ASCII кода заданного символа. В качестве параметра можно передать как целую строку (проверка произойдет для первого символа в строке), так и один символ или пробел.

Chr (код символа) – работает в обратном порядке по сравнению с предыдущей функцией. В качестве параметра мы передаем ASCII код, а на выходе получаем символ по заданному коду. Данная строковая VBA функция актуальна в тех случаях, когда нужно вывести служебный символ, например, кавычки, хотя чаще, используются именованные VBA константы.

InStr (строка1, строка2, [старт]) – предназначена для поиска последовательности знаков (строка2) в заданной строке (строка1). Можно также задать начальную позицию для поиска вхождения (необязательный параметр “старт”).

InStrRev (строка1, строка2, [старт]) – аналог предыдущей функции, но поиск происходит в обратном порядке.

Left (строка, длина) – позволяет вернуть заданное количество знаков (параметр “длина”) для выбранной строки (параметр “ строка ”), начиная слева.

Right (строка, длина) – позволяет вернуть заданное количество знаков для выбранной строки, начиная справа.

Mid (строка, длина, старт) – позволяет вернуть заданное количество знаков (параметр “длина”) для выбранной строки, начиная с заданной позиции (параметр “старт”).

Len (строка) – определяет численное количество символов в строке.

LCase (строка) – предназначена для преобразования всех символов в переданной строке в нижний регистр.

UCase (строка) – предназначена для преобразования всех символов в переданной строке в верхний регистр.

LSet (строка, длина) – заполняет содержимое переменной символами из другой переменной начиная слева, длина не изменяется, лишние знаки будут обрезаны, а вместо недостающих, будут подставляться пробелы.

RSet (строка, длина) – логика работы та же, что и для предыдущей vba функции работы со строками, но процесс происходит справа.

LTrim (строка) – удалить пробелы слева в строке

RTrim (строка) – удалить пробелы справа в строке

Trim (строка) – удалить пробелы справа и слева в строке

Replace () – замена в строке одних символов на другие

Space (количество_пробелов) – формирование строки из заданного количества пробелов

String (количество, символ) – формирование строки из заданного количества прописанных символов

Spc () – применяется для формирования вывода данных в консольном окне командной строки. Происходит размножение пробелов, учитывая ширину командной строки.

StrComp (строка1, строка2) – сравнение двух строк, вернет 0 при равенстве, и -1 в противном случае.

StrConv (строка, метод, [LCID]) – данная функция vba является универсальной, так как позволяет преобразовать заданную строку в различные вариации (верхний и нижний регистр, кодировка, перевод байт).

  • Строка – собственно, строковое значение, над которым нужно провести преобразование.
  • Метод – задает метод преобразования, данный параметр может принимать следующие значения:
  1. vbUpperCase – перевод в верхний регистр, значение 1
  2. vbLowerCase – перевод в нижний регистр, значение 2
  3. vbPropperCase – перевод первых символов всех слов в верхний регистр, а остальные символы – в нижний, значение 3.
  4. vbWide – применяется для кодировки восточных языков. Перевод символов в один байт с двухбайтовых. Значение 4.
  5. vbNarrow – аналог предыдущему параметру, но тут происходит перевод двух байт в один, значение 8.
  6. vbKatakana – происходит преобразование символов алфавита Хирагана в символы для алфавита Катана, применим для японского языка, значение 16.
  7. vbHiragana – аналог предыдущего параметра, но тут происходит преобразования вида Катана в Хирагана, значение 32. VBA строковые функции
  8. vbUnicode – перевод заданной строки в Unicode кодировку, значение 64.
  9. vbFormatUnicode – перевод из кодировки Unicode в стандартную, значение 128.
  • LCID – параметр не является обязательным, (vba строковые функции) он задает идентификатор региональных настроек. По умолчанию значение LocaleId, то есть, то значение, что установлено в панели управления.

StrReverse (строка) – инвертировать расположение знаков в строке, проще говоря, “отзеркаливает”.

Tab () – позволяет размножить символы табуляции в заданном количестве. Помимо этого, для вставки табуляции применяется именованная константа vbTab.

Аналогичные VBA строковые функции используются и в языке VBScript сервера сценариев Windows Script Host.

Спасибо за внимание. Автор блога Владимир Баталий

Юникод для чайников

logo
Сам я не очень люблю заголовки вроде «Покемоны в собственном соку для чайников\кастрюль\сковородок», но это кажется именно тот случай — говорить будем о базовых вещах, работа с которыми довольно часто приводить к купе набитых шишек и уйме потерянного времени вокруг вопроса — «Почему же оно не работает?». Если вы до сих пор боитесь и\или не понимаете Юникода — прошу под кат.

Зачем?

Главный вопрос новичка, который встречается с впечатляющим количеством кодировок и на первый взгляд запутанными механизмами работы с ними (например, в Python 2.x). Краткий ответ — потому что так сложилось 🙂

Кодировкой, кто не знает, называют способ представления в памяти компьютера (читай — в нулях-единицах\числах) цифр, буков и всех остальных знаков. Например, пробел представляется как 0b100000 (в двоичной), 32 (в десятичной) или 0x20 (в шестнадцатеричной системе счисления).

Так вот, когда-то памяти было совсем немного и всем компьютерам было достаточно 7 бит для представления всех нужных символов (цифры, строчный\прописной латинский алфавит, куча знаков и так называемые управляемые символы — все возможные 127 номеров были кому-то отданы). Кодировка в это время была одна — ASCII. Шло время, все были счастливы, а кто не был счастлив (читай — кому не хватало знака “©” или родной буквы «щ») — использовали оставшиеся 128 знаков на свое усмотрение, то есть создавали новые кодировки. Так появились и ISO-8859-1, и наши (то есть кириличные) cp1251 и KOI8. Вместе с ними появилась и проблема интерпретации байтов типа 0b1******* (то есть символов\чисел от 128 и до 255) — например, 0b11011111 в кодировке cp1251 это наша родная «Я», в тоже время в кодировке ISO-8859-1 это греческая немецкая Eszett (подсказывает Moonrise) “ß”. Ожидаемо, сетевая коммуникация и просто обмен файлами между разными компьютерами превратились в чёрт-знает-что, несмотря на то, что заголовки типа ‘Content-Encoding’ в HTTP протоколе, email-письмах и HTML-страницах немного спасали ситуацию.

Читайте также:  4 способа заменить точку на запятую в Excel

В этот момент собрались светлые умы и предложили новый стандарт — Unicode. Это именно стандарт, а не кодировка — сам по себе Юникод не определяет, как символы будут сохранятся на жестком диске или передаваться по сети. Он лишь определяет связь между символом и некоторым числом, а формат, согласно с которым эти числа будут превращаться в байты, определяется Юникод-кодировками (например, UTF-8 или UTF-16). На данный момент в Юникод-стандарте есть немного более 100 тысяч символов, тогда как UTF-16 позволяет поддерживать более одного миллиона (UTF-8 — и того больше).

Ближе к делу!

Естественно, есть поддержка Юникода и в Пайтоне. Но, к сожалению, только в Python 3 все строки стали юникодом, и новичкам приходиться убиваться об ошибки типа:

Давайте разберемся, но по порядку.

Зачем кто-то использует Юникод?

Почему мой любимый html-парсер возвращает Юникод? Пусть возвращает обычную строку, а я там уже с ней разберусь! Верно? Не совсем. Хотя каждый из существующих в Юникоде символов и можно (наверное) представить в некоторой однобайтовой кодировке (ISO-8859-1, cp1251 и другие называют однобайтовыми, поскольку любой символ они кодируют ровно в один байт), но что делать если в строке должны быть символы с разных кодировок? Присваивать отдельную кодировку каждому символу? Нет, конечно, надо использовать Юникод.

Зачем нам новый тип «unicode»?

Вот мы и добрались до самого интересного. Что такое строка в Python 2.x? Это просто байты. Просто бинарные данные, которые могут быть чем-угодно. На самом деле, когда мы пишем что-нибудь вроде:интерпретатор не создает переменную, которая содержит первые четыре буквы латинского алфавита, но только последовательность с четырёх байт, и латинские буквы здесь используются исключительно для обозначения именно этого значения байта. То есть ‘a’ здесь просто синоним для написания ‘\x61’, и ни чуточку больше. Например:

И ответ на вопрос — зачем нам «unicode» уже более очевиден — нужен тип, который будет представятся символами, а не байтами.

Хорошо, я понял чем есть строка. Тогда что такое Юникод в Пайтоне?

«type unicode» — это прежде всего абстракция, которая реализует идею Юникода (набор символов и связанных с ними чисел). Объект типа «unicode» — это уже не последовательность байт, но последовательность собственно символов без какого либо представления о том, как эти символы эффективно сохранить в памяти компьютера. Если хотите — это более высокой уровень абстракции, чем байтовый строки (именно так в Python 3 называют обычные строки, которые используются в Python 2.6).

Как пользоваться Юникодом?
  • u”” литерал:
  • Метод «decode» для байтовой строки:
  • Функция «unicode»:

Как из юникод-строки получить обычную? Закодировать её:

Алгоритм кодирования естественно обратный приведенному выше.

Запоминаем и не путаем — юникод == символы, строка == байты, и байты -> что-то значащее (символы) — это де-кодирование (decode), а символы -> байты — кодирование (encode).

Не кодируется 🙁

Разберем примеры с начала статьи. Как работает конкатенация строки и юникод-строки? Простая строка должна быть превращена в юникод-строку, и поскольку интерпретатор не знает кодировки, от использует кодировку по умолчанию — ascii. Если этой кодировке не удастся декодировать строку, получим некрасивую ошибку. В таком случае нам нужно самим привести строку к юникод-строке, используя правильную кодировку:

«UnicodeDecodeError» обычно есть свидетельством того, что нужно декодировать строку в юникод, используя правильную кодировку.

Теперь использование «str» и юникод-строк. Не используйте «str» и юникод строки 🙂 В «str» нет возможности указать кодировку, соответственно кодировка по умолчанию будет использоваться всегда и любые символы > 128 будут приводить к ошибке. Используйте метод «encode»:

«UnicodeEncodeError» — знак того, что нам нужно указать правильную кодировку во время превращения юникод-строки в обычную (или использовать второй параметр ‘ignore’\’replace’\’xmlcharrefreplace’ в методе «encode»).

Хочу ещё!

Хорошо, используем бабу-ягу из примера выше ещё раз:

  1. Что имеем на входе? Байты, которые IDLE передает интерпретатору. Что нужно на выходе? Юникод, то есть символы. Осталось байты превратить в символы — но ведь надо кодировку, правда? Какая кодировка будет использована? Смотрим дальше.
  2. Здесь важной момент:как видим, Пайтон не заморачивается с выбором кодировки — байты просто превращаются в юникод-поинты:
  3. Только вот проблема — 224-ый символ в cp1251 (кодировка, которая используется интерпретатором) совсем не тот, что 224 в Юникоде. Именно из-за этого получаем кракозябры при попытке напечатать нашу юникод-строку.
  4. Как помочь бабе? Оказывается, что первые 256 символов Юникода те же, что и в кодировке ISO-8859-1\latin1, соответственно, если используем её для кодировки юникод-строки, получим те байты, которые вводили сами (кому интересно — Objects/unicodeobject.c, ищем определение функции «unicode_encode_ucs1»):
  5. Как же получить бабу в юникоде? Надо указать, какую кодировку использовать:
  6. Способ с пункта #5 конечно не ахти, намного удобней использовать использовать built-in unicode.

Есть ещё способ использования «u”» для представления, например, кириллицы, и при этом не указывать кодировку или нечитабельные юникод-поинты (то есть «u’\u1234’»). Способ не совсем удобный, но интересный — использовать unicode entity codes:

Ну и вроде всё. Основные советы — не путать «encode»\«decode» и понимать различия между байтами и символами.

Python 3

Здесь без кода, ибо опыта нет. Свидетели утверждают, что там всё значительно проще и веселее. Кто возьмется на кошках продемонстрировать различия между здесь (Python 2.x) и там (Python 3.x) — респект и уважуха.

Полезно

Раз уж мы о кодировках, порекомендую ресурс, который время-от-времени помогает побороть кракозябры — http://2cyr.com/decode/?lang=ru.

Unicode HOWTO — официальный документ о том где, как и зачем Юникод в Python 2.x.

Как вставить в Excel символ: функции КОДСИМВ и СИМВОЛ

Здравствуйте, уважаемые читатели. Все символы, которые использует программа Microsoft Excel, хранятся в таблицах символов ANSI и UNICODE. Они содержат привычные кириллические символы, латиницу, цифры в различных способах представления, а так же специальные символы (например, стрелки, греческий алфавит, другие знаки). Как правило, специфических знаков нет на клавиатуре и для вставки нужно использование функций.

Чтобы вставить специфический символ, можно воспользоваться ленточной командой Вставка – Символы – Символ . Там выбрать нужный элемент и сделать на нём двойной клик.

Вставка символа с помощью ленты Excel

Вставка символа с помощью ленты

Если вы используете символ, которого нет на клавиатуре, можно воспользоваться функциями Excel. Я, например, помню коды тех символов, которые часто использую.

Чтобы определить код знака, воспользуйтесь функцией КОДСИМВ. Выполнение следующей операции даст результат «62»:

То есть, знак «больше» в таблице символов расположен под номером 62. Так же, этот номер можно увидеть в окне «Символ» в поле «Код знака» (см. рисунок).

Код символа Excel

Использование функции КОДСИМВ

Чтобы вставить символ, зная его код, воспользуемся функцией СИМВОЛ:

Функция СИМВОЛ в Excel

Функция СИМВОЛ в Эксель

Результатом выполнения этой функции будет знак «>» в ячейке. Так можно получить все символы из таблицы кодировки. Это полезно, когда вставка знака – часть большой формулы с условиями.

Попрактикуйтесь в использовании функций КОДСИМВ и СИМВОЛ, необходимость их применения может возникнуть в любой момент, вы должны быть к этому готовы.

Кстати, если Вы чувствуете, что не очень хорошо готовы к написанию формул и применению функций, Вам будут интересны посты о написании формул и применении функций в Excel.

А в следующем посте я расскажу как сравнить две текстовые строки. Почему эти функции нужно изучить досконально? Потому, что правильное сравнение данных может заменить ручной перебор строк и сэкономить Ваше время. Присоединяйтесь, будет полезно!

Иероглифы в Excel вместо текста

Очень часто мы сталкиваемся с ситуацией, когда при открытии файла в Excel получаем вместо текста набор иероглифов – дело тут в кодировке самих файлов и Excel.

Для того, чтобы избежать этого нужно:

  • на вкладке “Данные”, в блоке “Получение внешних данных” – нажать кнопку “Из текста”;
  • указать файл из которого нужно получить информацию;
  • затем в разделе “Формат данных” выбрать нужный вариант “С разделителями” или “Фиксированной ширины”;
  • в поле “Формат файла” изменить кодировку на “Юникод Windows”, нажать “Далее”;
  • если раннее был выбран вариант “С разделителями”, то на этом шаге можно выбрать символ (табуляция, точка, пробел и т.д.), нажать “Далее”;
  • на последнем шаге нужно определиться с форматом импортированных ячеек (Общий, текстовый, Дата), нажать “Готово”.

Вариант №2

Можно попробовать пересохранить файл с иероглифами в нужной кодировке:

  • “Файл” – > “Сохранить как”;
  • щёлкаем по треугольнику после кнопки “Сервис”;

иероглифы в excel вместо текста

  • выбираем пункт “Параметры веб-документа”;
  • переходим на закладку “Кодировка” и выбираем вместо Кириллицы Юникод (UTF-8), жмём “ОК”.

иероглифы в excel вместо текста

Иероглифы в Excel исчезнут!

Если остались вопросы – смотрите в наше новое видео!

Символы юникода в коде VBA

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Символы с диакрическими знаками в коде VBA
Попался клиент с французским офисом, некоторые модули листов названы по-фрацузски типа.

Использование юникода в коде:
Всем привет. Подскажите знающие люди, можно ли использовать юникод (или как это правильнее.

Символы с кодом юникода+random
Доброго времени суток всем, кодить на C# начал неделю назад с нуля, так, что сильно не пинайте.=).

В RichTextBox не отображаются символы юникода
Всем привет! Такой вопрос: в RichTextBox не отображаются символы юникода (вывожу нижние индексы).

Сообщение от Narimanych

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Windows-1251 и символы Юникода
Есть необходимость добавить поддержку всяких разных символов из юникода для вводимых данных на.

Как символы юникода вывести в консоль codeblocks на си
Мне нужны шахматные фигурки, которые есть в юникод кодировке https://unicode-table.com/ru/#2659.

Копирование файлов в папку с именем, содержащим символы Юникода
Нужно копировать все файлы из папки 2014г←03←21. Но так-как в этой папке присутствует русская.

Символы Юникода, написанные в FPC, при копировании в блокнот выдают кракозябры
Доброго времени суток, почему после символы юникода написанные в free pascal , при копировании в.

Как ввести полную поддержку юникода в коде, чтобы не писать префикс
Как ввести полную поддержку юникода в коде Чтобы не писать постоянно префикс

Как записать в файл любый символы юникода, после записи они меняются
Предчувствую что вопрос невежественный, поэтому заранее извиняюсь, я не программист. Мне нужно.

Как поменять кодировку в программе?

Для работы с таблицей, в которой используется стандарт, не заданный по умолчанию в программе, надо изменить кодировку. Существует несколько способов.

При помощи Notepad

Если в Экселе не получается превратить «кракозябры» в нормальный текст, откройте файл в программе «Notepad++». Она распространяется бесплатно. Настройте там отображение символов, а потом продолжайте работать в Excel.

Программа «Notepad++»

Откройте файл в программе «Notepad++»

  1. Создайте резервную копию документа. Или сохраните информацию из него в какой-нибудь другой таблице.
  2. Запустите Notepad.
  3. Перейдите в Файл — Открыть (File — Open) и укажите путь к таблице. В поле «Тип файла» поставьте «Все типы» («All types»). Или укажите конкретный формат. Таблицы имеют расширения .cvs, .xls, .xltm, xlam, .xlm. В Нотпаде текст отобразится без сетки. В нём ничего не надо редактировать.
  4. Справа внизу в строке состояния будет изображён стандарт, используемый сейчас.
  5. Откройте меню Кодировка (Encoding). Оно находится вверху окна.
  6. Нажмите «Преобразовать в UTF-8» («Convert to UTF-8»). Документ будет конвертирован в нужный формат. Этот стандарт Excel воспринимает нормально и не станет превращать в бессвязный поток странных символов.
  7. Теперь выберите, какие знаки необходимо использовать. В том же меню Encoding наведите выпадающий список. Он там один.
  8. Для русского языка выберите Кириллица — Windows-1251. Если текст, скажем, на арабском или греческом — отметьте соответствующий набор символов. В разных странах используются разные стандарты.
  9. Программа попросит подтвердить действие.
  10. Если это не помогло, попробуйте другие кириллические шрифты.
  11. Сохранять текст надо тоже в экселевском формате.
Читайте также:  Дашборд для анализа конверсии воронки продаж в Excel скачать

Работа в utf-8

Откройте файл в utf-8

Через интерфейс программы

Вот как сменить кодировку в Excel, используя встроенные возможности:

    . Не надо открывать заполненный документ. Нужен «чистый» лист.
  1. Перейдите во вкладку «Данные» в строке меню.
  2. На панели «Получать внешние данные» нажмите «Из текста».
  3. В списке «Тип файла» (он находится рядом с кнопкой «Отмена») выберите «Все» или «Любые». Так в окне будут отображаться форматы Excel, а не только .txt.
  4. Задайте путь к таблице.
  5. Откроется мастер импорта.
  6. В поле «Формат» можете выбрать желаемый стандарт.
  7. В области «Предварительный просмотр» показано, как будет выглядеть текст с отмеченным набором символов. Можете прокручивать список и искать, какая настройка подходит.
  8. Когда подберёте нужный вариант, нажмите «Готово».

встроенные возможности Excel

Можно использовать встроенные возможности

Иероглифы в Excel

Очень часто мы сталкиваемся с ситуацией, когда при открытии файла в Excel получаем вместо текста набор иероглифов – дело тут в кодировке самих файлов и Excel.

Для того, чтобы избежать этого нужно:

  • на вкладке "Данные", в блоке "Получение внешних данных" – нажать кнопку "Из текста";
  • указать файл из которого нужно получить информацию;
  • затем в разделе "Формат данных" выбрать нужный вариант "С разделителями" или "Фиксированной ширины";
  • в поле "Формат файла" изменить кодировку на "Юникод Windows", нажать "Далее";
  • если раннее был выбран вариант "С разделителями", то на этом шаге можно выбрать символ (табуляция, точка, пробел и т.д.), нажать "Далее";
  • на последнем шаге нужно определиться с форматом импортированных ячеек (Общий, текстовый, Дата), нажать "Готово".

Вариант №2

Можно попробовать пересохранить файл с иероглифами в нужной кодировке:

  • "Файл" – > "Сохранить как";
  • щёлкаем по треугольнику после кнопки "Сервис";
  • выбираем пункт "Параметры веб-документа";
  • переходим на закладку "Кодировка" и выбираем вместо Кириллицы Юникод (UTF-8), жмём "ОК".

Иероглифы в Excel исчезнут!

Если остались вопросы – смотрите в наше новое видео!

Что такое Символ Unicode?

Универсальная система кодирования ( Юникод – от англ. Unicode ) – это набор графических символов и способ их кодирования для компьютерной обработки текстовых данных. Юникод позволяет представить почти все языки мира, имеющие письменность, посредством одного набора знаков.

Стандарт состоит из двух основных разделов: универсального набора символов и семейства кодировок. При этом универсальный набор символов задает однозначное соответствие символов кодам, а семейство кодировок определяет машинное представление последовательности кодов. Коды в стандарте Unicode разделены на несколько областей – в начале идет область с символами набора ASCII, а далее расположены области знаков различных письменностей, знаки пунктуации и технические символы. Часть кодов зарезервирована для использования в будущем.

В настоящее время действует Unicode 13.0. Еще в далёком 2000 году, операционная система Windows предлагала использовать свою служебную программу «Таблица символов», где представлены были все символы, поддерживаемые конкретными шрифтами. Кроме этого, представленные в таблице символы можно копировать и вставлять в прикладные программы, например в Word.

Таким образом, мы подошли с вами к практической части использования этих символов. Вы можете с легкостью найти нужный вам символ в таблице юникодов и вставить его в ваш документ. Например, знак ± или кавычки представить не в виде верхних галочек ". ", а в виде «. » – что для вордового документа будет правильнее.

Функции VBA для работы с текстом

Dim sStr As String sStr = "w" If InStr(1, "Hello, World!", sStr, vbTextCompare) > 0 Then MsgBox "Искомое слово присутствует!" Else MsgBox "Искомое слово отсутствует!" End If

Dim sStr As String sStr = "Hello, World!" MsgBox Mid(sStr, 1, 5)

Dim sStr As String sStr = "Hello, World!" MsgBox Replace(sStr, "Hello", "Bay")

Dim sStr As String sStr = "Hello, World!" MsgBox StrConv("Hello, World!", vbUpperCase)

В качестве второго параметра параметра могут применяться константы:

  • vbUpperCase: Преобразует все текстовые символы в ВЕРХНИЙ РЕГИСТР
  • vbLowerCase: Преобразует все текстовые символы в нижний регистр
  • vbProperCase: Переводит первый символ каждого слова в Верхний Регистр
  • *vbWide: Преобразует символы строки из однобайтовых в двухбайтовые
  • *vbNarrow: Преобразует символы строки из двухбайтовых в однобайтовые
  • **vbKatakana: Преобразует символы Hiragana в символы Katakana
  • **vbHiragana: Преобразует символы Katakana в символы Hiragana
  • ***vbUnicode: Преобразует строку в Юникод с помощью кодовой страницы системы по умолчанию
  • ***vbFromUnicode: Преобразует строку из Юникод в кодовую страницу системы по умолчанию

Юникод: необходимый практический минимум для каждого разработчика

Юникод — это очень большой и сложный мир, ведь стандарт позволяет ни много ни мало представлять и работать в компьютере со всеми основными письменностями мира. Некоторые системы письма существуют уже более тысячи лет, причём многие из них развивались почти независимо друг от друга в разных уголках мира. Люди так много всего придумали и оно зачастую настолько непохоже друг на друга, что объединить всё это в единый стандарт было крайне непростой и амбициозной задачей.

Чтобы по-настоящему разобраться с Юникодом нужно хотя бы поверхностно представлять себе особенности всех письменностей, с которыми позволяет работать стандарт. Но так ли это нужно каждому разработчику? Мы скажем, что нет. Для использования Юникода в большинстве повседневных задач, достаточно владеть разумным минимумом сведений, а дальше углубляться в стандарт по мере необходимости.

В статье мы расскажем об основных принципах Юникода и осветим те важные практические вопросы, с которыми разработчики непременно столкнутся в своей повседневной работе.

Зачем понадобился Юникод?

До появления Юникода, почти повсеместно использовались однобайтные кодировки, в которых граница между самими символами, их представлением в памяти компьютера и отображением на экране была довольно условной. Если вы работали с тем или иным национальным языком, то в вашей системе были установлены соответствующие шрифты-кодировки, которые позволяли отрисовывать байты с диска на экране таким образом, чтобы они представляли смысл для пользователя.

Если вы распечатывали на принтере текстовый файл и на бумажной странице видели набор непонятных кракозябр, это означало, что в печатающее устройство не загружены соответствующие шрифты и оно интерпретирует байты не так, как вам бы этого хотелось.

У такого подхода в целом и однобайтовых кодировок в частности был ряд существенных недостатков:

  1. Можно было одновременно работать лишь с 256 символами, причём первые 128 были зарезервированы под латинские и управляющие символы, а во второй половине кроме символов национального алфавита нужно было найти место для символов псевдографики (╔ ╗).
  2. Шрифты были привязаны к конкретной кодировке.
  3. Каждая кодировка представляла свой набор символов и конвертация из одной в другую была возможна только с частичными потерями, когда отсутствующие символы заменялись на графически похожие.
  4. Перенос файлов между устройствами под управлением разных операционных систем был затруднителен. Нужно было либо иметь программу-конвертер, либо таскать вместе с файлом дополнительные шрифты. Существование Интернета каким мы его знаем было невозможным.
  5. В мире существуют неалфавитные системы письма (иероглифическая письменность), которые в однобайтной кодировке непредставимы в принципе.

Основные принципы Юникода

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

Важно! Одним из центральных принципов в философии Юникода является чёткое разграничение между символами, их представлением в компьютере и их отображением на устройстве вывода.

Вводится понятие абстрактного юникод-символа, существующего исключительно в виде умозрительной концепции и договорённости между людьми, закреплённой стандартом. Каждому юникод-символу поставлено в соответствие неотрицательное целое число, именуемое его кодовой позицией (code point).

Так, например, юникод-символ U+041F — это заглавная кириллическая буква П. Существует несколько возможностей представления данного символа в памяти компьютера, ровно как и несколько тысяч способов отображения его на экране монитора. Но при этом П, оно и в Африке будет П или U+041F.

image

Это хорошо нам знакомая инкапсуляция или отделение интерфейса от реализации — концепция, отлично зарекомендовавшая себя в программировании.

Получается, что руководствуясь стандартом, любой текст можно закодировать в виде последовательности юникод-символов

записать на листочке, упаковать в конверт и переслать в любой конец Земли. Если там знают о существовании Юникода, то текст будет воспринят ими ровно так же, как и нами с вами. У них не будет ни малейших сомнений, что предпоследний символ — это именно кириллическая строчная е (U+0435), а не скажем латинская маленькая e (U+0065). Обратите внимание, что мы ни слова не сказали о байтовом представлении.

Хотя юникод-символы и называются символами, они далеко не всегда соответствуют символу в традиционно-наивном понимании, например букве, цифре, пунктуационному знаку или иероглифу. (Подробнее смотри под спойлером.)

  • U+0000: нулевой символ;
  • U+D800–U+DFFF: младшие и старшие суррогаты для технического представления кодовых позиций в диапазоне от 10000 до 10FFFF (читай: за пределами БМЯП/BMP) в семействе кодировок UTF-16;
  • и т.д.
  • U+0020 (пробел);
  • U+00A0 (неразрывный пробел,   в HTML);
  • U+2002 (полукруглая шпация или En Space);
  • U+2003 (круглая шпация или Em Space);
  • и т.д.
  • U+0300 и U+0301: знаки основного (острого) и второстепенного (слабого) ударений;
  • U+0306: кратка (надстрочная дуга), как в й;
  • U+0303: надстрочная тильда;
  • и т.д.

Что такое символ, чем отличается графемный кластер (читай: воспринимаемое как единое целое изображение символа) от юникод-символа и от кодового кванта мы расскажем в следующий раз.

Кодовое пространство Юникода

Кодовое пространство Юникода состоит из 1 114 112 кодовых позиций в диапазоне от 0 до 10FFFF. Из них к девятой версии стандарта значения присвоены лишь 128 237. Часть пространства зарезервирована для частного использования и консорциум Юникода обещает никогда не присваивать значения позициям из этих специальный областей.

Ради удобства всё пространство поделено на 17 плоскостей (сейчас задействовано шесть их них). До недавнего времени было принято говорить, что скорее всего вам придётся столкнуться только с базовой многоязыковой плоскостью (Basic Multilingual Plane, BMP), включающей в себя юникод-символы от U+0000 до U+FFFF. (Забегая немного вперёд: символы из BMP представляются в UTF-16 двумя байтами, а не четырьмя). В 2016 году этот тезис уже вызывает сомнения. Так, например, популярные символы Эмодзи вполне могут встретиться в пользовательском сообщении и нужно уметь их корректно обрабатывать.

Кодировки

Если мы хотим переслать текст через Интернет, то нам потребуется закодировать последовательность юникод-символов в виде последовательности байтов.

Стандарт Юникода включает в себя описание ряда юникод-кодировок, например UTF-8 и UTF-16BE/UTF-16LE, которые позволяют кодировать всё пространство кодовых позиций. Конвертация между этими кодировками может свободно осуществляться без потерь информации.

Также никто не отменял однобайтные кодировки, но они позволяют закодировать свой индивидуальный и очень узкий кусочек юникод-спектра — 256 или менее кодовых позиций. Для таких кодировок существуют и доступны всем желающим таблицы, где каждому значению единственного байта сопоставлен юникод-символ (см. например CP1251.TXT). Несмотря на ограничения, однобайтные кодировки оказываются весьма практичными, если речь идёт о работе с большим массивом моноязыковой текстовой информации.

Из юникод-кодировок самой распространённой в Интернете является UTF-8 (она завоевала пальму первенства в 2008 году), главным образом благодаря её экономичности и прозрачной совместимости с семибитной ASCII. Латинские и служебные символы, основные знаки препинания и цифры — т.е. все символы семибитной ASCII — кодируются в UTF-8 одним байтом, тем же, что и в ASCII. Символы многих основных письменностей, не считая некоторых более редких иероглифических знаков, представлены в ней двумя или тремя байтами. Самая большая из определённых стандартом кодовых позиций — 10FFFF — кодируется четырьмя байтами.

Обратите внимание, что UTF-8 — это кодировка с переменной длиной кода. Каждый юникод-символ в ней представляется последовательностью кодовых квантов с минимальной длиной в один квант. Число 8 означает битовую длину кодового кванта (code unit) — 8 бит. Для семейства кодировок UTF-16 размер кодового кванта составляет, соответственно, 16 бит. Для UTF-32 — 32 бита.

Для хранения строковой информации в приложениях часто используются 16-битные юникод-кодировки в силу их простоты, а так же того факта, что символы основных мировых систем письма кодируются одним шестнадцатибитовым квантом. Так, например, Java для внутреннего представления строк успешно применяет UTF-16. Операционная система Windows внутри себя также использует UTF-16.

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

Для корректной интерпретации текста, прочитанного с диска или из сетевого сокета, необходимо сначала определить его кодировку. Это делается либо с использованием метаинформации, предоставленной пользователем, записанной в тексте или рядом с ним, либо определяется эвристически.

В сухом остатке

Информации много и имеет смысл привести краткую выжимку всего, что было написано выше:

  • Юникод постулирует чёткое разграничение между символами, их представлением в компьютере и их отображением на устройстве вывода.
  • Юникод-символы не всегда соответствуют символу в традиционно-наивном понимании, например букве, цифре, пунктуационному знаку или иероглифу.
  • Кодовое пространство Юникода состоит из 1 114 112 кодовых позиций в диапазоне от 0 до 10FFFF.
  • Базовая многоязыковая плоскость включает в себя юникод-символы от U+0000 до U+FFFF, которые кодируются в UTF-16 двумя байтами.
  • Любая юникод-кодировка позволяет закодировать всё пространство кодовых позиций Юникода и конвертация между различными такими кодировками осуществляется без потерь информации.
  • Однобайтные кодировки позволяют закодировать лишь небольшую часть юникод-спектра, но могут оказаться полезными при работе с большим объёмом моноязыковой информации.
  • Кодировки UTF-8 и UTF-16 обладают переменной длиной кода. В UTF-8 каждый юникод-символ может быть закодирован одним, двумя, тремя или четырьмя байтами. В UTF-16 — двумя или четырьмя байтами.
  • Внутренний формат хранения текстовой информации в рамках отдельного приложения может быть произвольным при условии корректной работы со всем пространством кодовых позиций Юникода и отсутствии потерь при трансграничной передаче данных.

Краткое замечание про кодирование

С термином кодирование может произойти некоторая путаница. В рамках Юникода кодирование происходит дважды. Первый раз кодируется набор символов Юникода (character set), в том смысле, что каждому юникод-символу ставится с соответствие кодовая позиция. В рамках этого процесса набор символов Юникода превращается в кодированный набор символов (coded character set). Второй раз последовательность юникод-символов преобразуется в строку байтов и этот процесс также называется кодирование.

В англоязычной терминологии существуют два разных глагола to code и to encode, но даже носители языка зачастую в них путаются. К тому же термин набор символов (character set или charset) используется в качестве синонима к термину кодированный набор символов (coded character set).

Всё это мы говорим к тому, что имеет смысл обращать внимание на контекст и различать ситуации, когда речь идёт о кодовой позиции абстрактного юникод-символа и когда речь идёт о его байтовом представлении.

Способ второй: использование “Мастера текстов”

Непосредственно в самой программе Microsoft Excel есть тоже инструменты, которые позволят изменить кодировку. Именно о таком и пойдет сейчас речь, а точнее, о “Мастере текстов”:

  1. Откройте программу “Эксель”. Обратите внимание, что ее нужно запускать не двойным кликом по файлу, который неверно отображается, а непосредственно программу с пустым листом.
  2. Перейдите во вкладку “Данные”.
  3. Нажмите кнопку “Получение внешних данных”, а в выпадающем меню выберите “Из текста”.
  4. В появившемся окне проводника укажите путь к файлу, который имеет проблемы с кодировкой, и нажмите кнопку “Импорт”.
  5. Теперь откроется непосредственно само окно “Мастера текстов”. В нем необходимо изменить формат файла, именно поэтому нажмите на одноименный выпадающий список и выберите оттуда “Юникод (UTF-8)”.
  6. Нажмите “Далее”.
  7. Следующее окно также пропустите, нажав кнопку “Далее”, все настройки в нем должны стоять по умолчанию.
  8. Теперь вам необходимо определить формат данных столбца файла и в соответствии с ним выбрать один из пунктов одноименного списка. По итогу нажмите “Готово”.

как изменить кодировку в excel

Как поменять кодировку в Excel вторым способом, понятно. Переходим к третьему.

Применение в функциях

Как уже говорилось выше, подстановочные знаки в Excel могут использоваться в качестве критерия при сравнении текста в различных функциях Excel (например, СЧЁТЕСЛИ, СУММЕСЛИ, СУММЕСЛИМН, ГПР, ВПР и другие).

Повторим задачу из предыдущего примера и подсчитаем количество сотрудников компании, фамилии которых начинаются на букву «п».
Воспользуемся функцией СЧЁТЕСЛИ, которая позволяет посчитать количество ячеек соответствующих указанному критерию.
В качестве диапазона данных укажем диапазон с сотрудниками (A2:A20), а в качестве критерия укажем запись «п*» (т.е. любая фраза начинающаяся на букву «п»):


Как и в первом примере, в результате мы получили ровно 3 фамилии.

Однако не все функции поддерживают применение подстановочных знаков. Некоторые из них (к примеру, функция НАЙТИ) любой символ воспринимают как текст, даже несмотря на то, что он может быть служебным.
С помощью функции НАЙТИ найдем в тексте позицию вхождения вопросительного знака и звездочки:


Обратным примером служит аналогичная функция ПОИСК, в которой мы должно четко указать что ищем именно служебный символ:


Как видим результат у функций получился одинаковым, однако обращение к подстановочным знакам разное.

Юникод для чайников

logo
Сам я не очень люблю заголовки вроде «Покемоны в собственном соку для чайников\кастрюль\сковородок», но это кажется именно тот случай — говорить будем о базовых вещах, работа с которыми довольно часто приводить к купе набитых шишек и уйме потерянного времени вокруг вопроса — «Почему же оно не работает?». Если вы до сих пор боитесь и\или не понимаете Юникода — прошу под кат.

Зачем?

Главный вопрос новичка, который встречается с впечатляющим количеством кодировок и на первый взгляд запутанными механизмами работы с ними (например, в Python 2.x). Краткий ответ — потому что так сложилось 🙂

Кодировкой, кто не знает, называют способ представления в памяти компьютера (читай — в нулях-единицах\числах) цифр, буков и всех остальных знаков. Например, пробел представляется как 0b100000 (в двоичной), 32 (в десятичной) или 0x20 (в шестнадцатеричной системе счисления).

Так вот, когда-то памяти было совсем немного и всем компьютерам было достаточно 7 бит для представления всех нужных символов (цифры, строчный\прописной латинский алфавит, куча знаков и так называемые управляемые символы — все возможные 127 номеров были кому-то отданы). Кодировка в это время была одна — ASCII. Шло время, все были счастливы, а кто не был счастлив (читай — кому не хватало знака “©” или родной буквы «щ») — использовали оставшиеся 128 знаков на свое усмотрение, то есть создавали новые кодировки. Так появились и ISO-8859-1, и наши (то есть кириличные) cp1251 и KOI8. Вместе с ними появилась и проблема интерпретации байтов типа 0b1******* (то есть символов\чисел от 128 и до 255) — например, 0b11011111 в кодировке cp1251 это наша родная «Я», в тоже время в кодировке ISO-8859-1 это греческая немецкая Eszett (подсказывает Moonrise) “ß”. Ожидаемо, сетевая коммуникация и просто обмен файлами между разными компьютерами превратились в чёрт-знает-что, несмотря на то, что заголовки типа ‘Content-Encoding’ в HTTP протоколе, email-письмах и HTML-страницах немного спасали ситуацию.

В этот момент собрались светлые умы и предложили новый стандарт — Unicode. Это именно стандарт, а не кодировка — сам по себе Юникод не определяет, как символы будут сохранятся на жестком диске или передаваться по сети. Он лишь определяет связь между символом и некоторым числом, а формат, согласно с которым эти числа будут превращаться в байты, определяется Юникод-кодировками (например, UTF-8 или UTF-16). На данный момент в Юникод-стандарте есть немного более 100 тысяч символов, тогда как UTF-16 позволяет поддерживать более одного миллиона (UTF-8 — и того больше).

Ближе к делу!

Естественно, есть поддержка Юникода и в Пайтоне. Но, к сожалению, только в Python 3 все строки стали юникодом, и новичкам приходиться убиваться об ошибки типа:

Давайте разберемся, но по порядку.

Зачем кто-то использует Юникод?

Почему мой любимый html-парсер возвращает Юникод? Пусть возвращает обычную строку, а я там уже с ней разберусь! Верно? Не совсем. Хотя каждый из существующих в Юникоде символов и можно (наверное) представить в некоторой однобайтовой кодировке (ISO-8859-1, cp1251 и другие называют однобайтовыми, поскольку любой символ они кодируют ровно в один байт), но что делать если в строке должны быть символы с разных кодировок? Присваивать отдельную кодировку каждому символу? Нет, конечно, надо использовать Юникод.

Зачем нам новый тип «unicode»?

Вот мы и добрались до самого интересного. Что такое строка в Python 2.x? Это просто байты. Просто бинарные данные, которые могут быть чем-угодно. На самом деле, когда мы пишем что-нибудь вроде:интерпретатор не создает переменную, которая содержит первые четыре буквы латинского алфавита, но только последовательность с четырёх байт, и латинские буквы здесь используются исключительно для обозначения именно этого значения байта. То есть ‘a’ здесь просто синоним для написания ‘\x61’, и ни чуточку больше. Например:

И ответ на вопрос — зачем нам «unicode» уже более очевиден — нужен тип, который будет представятся символами, а не байтами.

Хорошо, я понял чем есть строка. Тогда что такое Юникод в Пайтоне?

«type unicode» — это прежде всего абстракция, которая реализует идею Юникода (набор символов и связанных с ними чисел). Объект типа «unicode» — это уже не последовательность байт, но последовательность собственно символов без какого либо представления о том, как эти символы эффективно сохранить в памяти компьютера. Если хотите — это более высокой уровень абстракции, чем байтовый строки (именно так в Python 3 называют обычные строки, которые используются в Python 2.6).

Как пользоваться Юникодом?
  • u”” литерал:
  • Метод «decode» для байтовой строки:
  • Функция «unicode»:

Как из юникод-строки получить обычную? Закодировать её:

Алгоритм кодирования естественно обратный приведенному выше.

Запоминаем и не путаем — юникод == символы, строка == байты, и байты -> что-то значащее (символы) — это де-кодирование (decode), а символы -> байты — кодирование (encode).

Не кодируется 🙁

Разберем примеры с начала статьи. Как работает конкатенация строки и юникод-строки? Простая строка должна быть превращена в юникод-строку, и поскольку интерпретатор не знает кодировки, от использует кодировку по умолчанию — ascii. Если этой кодировке не удастся декодировать строку, получим некрасивую ошибку. В таком случае нам нужно самим привести строку к юникод-строке, используя правильную кодировку:

«UnicodeDecodeError» обычно есть свидетельством того, что нужно декодировать строку в юникод, используя правильную кодировку.

Теперь использование «str» и юникод-строк. Не используйте «str» и юникод строки 🙂 В «str» нет возможности указать кодировку, соответственно кодировка по умолчанию будет использоваться всегда и любые символы > 128 будут приводить к ошибке. Используйте метод «encode»:

«UnicodeEncodeError» — знак того, что нам нужно указать правильную кодировку во время превращения юникод-строки в обычную (или использовать второй параметр ‘ignore’\’replace’\’xmlcharrefreplace’ в методе «encode»).

Хочу ещё!

Хорошо, используем бабу-ягу из примера выше ещё раз:

  1. Что имеем на входе? Байты, которые IDLE передает интерпретатору. Что нужно на выходе? Юникод, то есть символы. Осталось байты превратить в символы — но ведь надо кодировку, правда? Какая кодировка будет использована? Смотрим дальше.
  2. Здесь важной момент:как видим, Пайтон не заморачивается с выбором кодировки — байты просто превращаются в юникод-поинты:
  3. Только вот проблема — 224-ый символ в cp1251 (кодировка, которая используется интерпретатором) совсем не тот, что 224 в Юникоде. Именно из-за этого получаем кракозябры при попытке напечатать нашу юникод-строку.
  4. Как помочь бабе? Оказывается, что первые 256 символов Юникода те же, что и в кодировке ISO-8859-1\latin1, соответственно, если используем её для кодировки юникод-строки, получим те байты, которые вводили сами (кому интересно — Objects/unicodeobject.c, ищем определение функции «unicode_encode_ucs1»):
  5. Как же получить бабу в юникоде? Надо указать, какую кодировку использовать:
  6. Способ с пункта #5 конечно не ахти, намного удобней использовать использовать built-in unicode.

Есть ещё способ использования «u”» для представления, например, кириллицы, и при этом не указывать кодировку или нечитабельные юникод-поинты (то есть «u’\u1234’»). Способ не совсем удобный, но интересный — использовать unicode entity codes:

Ну и вроде всё. Основные советы — не путать «encode»\«decode» и понимать различия между байтами и символами.

Python 3

Здесь без кода, ибо опыта нет. Свидетели утверждают, что там всё значительно проще и веселее. Кто возьмется на кошках продемонстрировать различия между здесь (Python 2.x) и там (Python 3.x) — респект и уважуха.

Полезно

Раз уж мы о кодировках, порекомендую ресурс, который время-от-времени помогает побороть кракозябры — http://2cyr.com/decode/?lang=ru.

Unicode HOWTO — официальный документ о том где, как и зачем Юникод в Python 2.x.

Ссылка на основную публикацию
Adblock
detector