Всех друзей поздравляем с Новым годом! Всего вам самого наилучшего! Всех благ, здоровья а материальное приложится!
СКРИПТЫ althtmlcssphpjsblog

Отличие utf-8 и windows 1251

Поддержи проект!!! smile

Отличие utf-8 и windows 1251. Рассмотрим, чем отличаются две кодировки "utf-8 и windows 1251" в теории и на практике. И как победить некоторые проблемы для кириллицы в utf-8!?

О разнице между двумя кодировками utf-8 и windows 1251

  1. О кодировках utf-8 и windows 1251
  2. Пример вывода текста в кодировках utf-8 латиницы
  3. Пример вывода текста в кодировках utf-8 кириллицы
  4. Пример отличия в кодировках utf-8 и windows 1251
  5. Как перекодировать строку из utf-8 в windows 1251
  1. О кодировках utf-8 и windows 1251

    Прежде чем перейти к практике разбора разницы между двумя кодировками utf-8 и windows 1251 нужно хоть немного теории, чтобы от чего-то отталкиваться!

    Что такое кодировка windows 1251

    Windows-1251 – набор символов и кодировка, являющаяся стандартной 8-битной кодировкой для всех русских версий Microsoft Windows. Пользуется довольно большой популярностью. Windows-1251 выгодно отличается от других 8‑битных кириллических кодировок (таких как CP866, KOI8-R и ISO 8859-5) наличием практически всех символов, использующихся в русской типографике для обычного текста; она также содержит все символы для близких к русскому языку языков: украинского, белорусского, сербского и болгарского.

    Что такое кодировка windows 1251

    UTF-8 – в настоящее время распространённая кодировка, реализующая представление Юникода, совместимое с 8-битным кодированием текста. Нашла широкое применение в операционных системах и веб-пространстве. Текст, состоящий только из символов Юникода с номерами меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт.

    Символ в кодировке UTF-8 может кодироваться аж 6 байтами (пока используется только 4 и больше не планируется). Для русского языка, например, символ занимает 2 байта. Все символы, которые есть в таблице символов – поддерживаются этой кодировкой. К примеру, если вам нужен знак копирайта (©), то вам не нужно искать особый шрифт или же изображать символов в графическом формате.

    Чем отличаются utf-8 и windows 1251

    Главное отличие кодировок – это используемый набор символов. В UTF-8 гораздо больше количество символов возможно представить, чем в Windows- 1251. Кодировка Windows- 1251 однобайтовая, т.е. представить в ней можно только 255 символов. Для кириллицы, впрочем, этого вполне достаточно, именно поэтому однобайтовые кодировки до сих пор так массово применяются.

  2. Пример вывода текста в кодировках utf-8 латиницы

    Когда и если вы прочитали теорию о разнице кодировок utf-8 и windows 1251 - это уже победа! wall

    А если вы еще и поняли о чем идет речь, то вы вообще Эйнштейн! thumbs_up, то и смысла особого вам читать дальше нет.

    А для всех остальных продолжим...

    Чем отличается текст в кодировках utf-8 и windows 1251

    Теория - это конечно классно и круто, но как обстоит дело на практике!

    Как показать отличие двух кодировок!?

    У нас на сайте основная кодировка utf-8, и мы не напрягаясь можем посмотреть, что творится с текстом в этой кодировке!

    Нам понадобится какой-то текст на латинице:

    И... нам нужно такое слово, чтобы имело одинаковое количество букв в слове, ну пусть это будет моё имя...

    Пусть это будет слово - "Marat!"

    Далее нам потребуется функция var_dump.

    И выведем прямо здесь вот такую конструкцию :

    var_dump('Marat');

    Результат:

    string(5) "Marat"

    Что мы здесь можем прочитать!?

    Что это строка, и что в ней 5 элементов.

  3. Пример вывода текста в кодировках utf-8 кириллицы

    Теперь, проделаем тоже самое со строкой на кириллице:

    У нас все таже кодировка utf-8.

    Но теперь нам понадобится текст на кириллице:

    Пусть это будет слово - "Марат!"

    Опять var_dump.

    И выведем прямо здесь вот такую конструкцию :

    var_dump('Марат');

    Результат:

    string(10) "Марат"

    И что мы здесь видим!?

    Что количество элементов в строке 10... Если вы читали теорию внимательно, то вот вам показатель того, что одна буква состоит из двух символов, а латиницы это не касается...!

    Поэтому, и возникают проблемы с текстов в кодировке utf-8 кириллицы, множество функций тупо не работают.

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

  4. Пример отличия в кодировках utf-8 и windows 1251

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

    Результат вывода var_dump('Marat');:
    string(5) "Marat"
    Результат var_dump('Марат');:
    string(10) "Марат"

    Что делать, если функция для кириллицы на utf-8 не работают?

    Поскольку я давно занимаюсь сайтами, то могу сказать, что на самом деле таких случаев не так много, когда нужна какая-то специальная функция для обработки кириллицы на utf-8.

    Но если уж она возникала, то есть несколько вариантов решения!

    Это функции с приставкой "mb_", естественно надо проверять, работает ли она у вас на хостинге.

    Второй вариант, это написать собственную функцию, которая будет работать и для латиницы и кириллицы? как это я показал на функции strtolower

    И третий вариант перекодировать строку из utf-8 в windows 1251

    Рассмотрим, первый попавшийся на ум пример...

    Пусть это будет функция str_split и её аналог mb_str_split

    print_r (str_split('Марат')); выдаст :

    Array

    (

    [0] =>

    [1] =>

    [2] =>

    [3] =>

    [4] =>

    [5] =>

    [6] =>

    [7] =>

    [8] =>

    [9] =>

    )

    print_r (mb_str_split('Марат')); выдаст :

    Что делать, если функция для кириллицы на utf-8 не работают?

    Как видим... полный отстой...

    Мы далее разбирались с этим здесь.

  5. Как перекодировать строку из utf-8 в windows 1251

    Итак... есть третий вариант, борьбы с квадратиками(непонимание кодировки) - перекодировать строку из utf-8 в windows 1251:

    iconv("UTF-8", "windows-1251", $text)

    После того, как вы выполнили все намеченные действия с текстом, возвращаем его в исходную кодировку :

    iconv("windows-1251", "UTF-8", $text)

    Рассмотрим пример перекодировки текста из UTF-8 в windows-1251 и обратно

    Мы использовали var_dump, и он посчитал не правильно, поскольку просто так, на страницу вывести данные с помощью var_dump нельзя, мы использовали вот такой костыль :

    ob_start();

    var_dump( 'Марат' );

    echo ob_get_clean();

    Теперь попробуем перекодировать строку прямо внутри :

    ob_start();

    var_dump(iconv("UTF-8", "windows-1251", 'Марат')) ;

    echo ob_get_clean() ;

    Результат подсчета знаков верный, но видим что слово не было перекодировано обратно :

    string(5) ""

    Исправим:

    ob_start();

    var_dump(iconv("UTF-8", "windows-1251", 'Марат')) ;

    echo iconv("windows-1251", "UTF-8", ob_get_clean());

    Результат :

    string(5) "Марат"

    Итак... вы видели процесс кодировки и перекодировки текста из utf-8 в windows 1251, а потом обратно!


    Вы наверное подумали :

    Что за дичь здесь происходит!? Это не дичь! Когда ты внутри, а не снаружи, то все кажется не простым, а очень простым.

    И чем больше ты в теме, это просто, как есть, пить, дышать... просто не задумываешься...

    Я не говорю, что всегда так, иногда бывает очень трудно какаю-то задачку решить... shootself2


Вас может еще заинтересовать список тем : #HTML |
Последняя дата редактирования : 2020-11-04 18:09
//dwweb.ru/comments_1_5/include/img/hand_no_foto.png
no
no
Еще никто не прокомментировал! COMMENTS+   BBcode
аватар
🞨
Загрузить свой аватар
(max ширина, высота = 200px)

Подписаться + =
Теги:
Отличие utf и windows

Последние комментарии :
Марат :
03/12/2020 08:47
Давно пользуюсь данным скриптом, который написал еще при царе горохе!За десять лет изменилось то, что и при…
подробнее.
Ольга Попова :
02/12/2020 11:42
Я уж было обрадовалась, а у меня не…
подробнее.
Марат :
23/11/2020 07:38
Приходите ещё!
подробнее.
Лило :
23/11/2020 06:34
Благодарю, удобно
подробнее.
Марат :
15/11/2020 01:57
Здесь отвечал...1) Есть вот комментарии от вконтактае, очень простые 2)Такое же есть от мордокниги, 3) смотрите…
подробнее.