Как windows 1251 преобразовать utf 8 в windows 1251

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

Содержание

  1. Как изменить кодировку текстового файла на UTF-8 или Windows 1251
  2. Блокнот Windows
  3. Notepad++
  4. Akelpad
  5. Как преобразовать utf 8 в windows 1251
  6. Интересные решения Perl. Вопросы и ответы
  7. Как конвертировать строку из UTF-8 в Windows-1251?
  8. Комментарии посетителей сайта
  9. Как преобразовать utf 8 в windows 1251
  10. Заметки Лёвика
  11. web программирование, администрирование и всякая всячина, которая может оказаться полезной
  12. Если не работает iconv
  13. iconv array для массива
  14. Как сменить кодировку файла? Notepad++ редактор с подсветкой синтаксиса, кодировка Utf-8 без BOM
  15. Чем вообще хорош этот редактор?

Как изменить кодировку текстового файла на UTF-8 или Windows 1251

Кодировка текста – это схема нумерации символов, в которой каждому символу, цифре или знаку присвоено соответствующее число. Кодировку используют для сохранения и обработки текста на компьютере. Каждый раз при сохранении текста в файл он сохраняется с использованием определенной схемы кодирования, и при открытии этого файла необходимо использовать такую же схему, иначе восстановить исходный текст не получится. Самыми популярными кодировками для кириллицы сейчас являются UTF-8, Windows-1251 (CP1251, ANSI).

Для того чтобы программа смогла правильно открыть текстовый файл, иногда приходится вручную менять кодировку, перекодируя текст из одной схемы в другую. Например, не редко возникают проблемы с открытием файлов CSV, XML, SQL, TXT, PHP.

В этой небольшой статье мы расскажем о том, как изменить кодировку текстового файла на UTF-8, Windows-1251 или любую другую.

Блокнот Windows

Если вы используете операционную систему Windows 10 или Windows 11, то вы можете изменить кодировку текста с помощью стандартной программы Блокнот. Для этого нужно открыть текстовый файл с помощью Блокнота и воспользоваться меню « Файл – Сохранить как ».

082621 0816 1

В открывшемся окне нужно указать новое название для файла, выбрать подходящую кодировку и нажать на кнопку « Сохранить ».

082621 0816 2

К сожалению, для подобных задач программа Блокнот часто не подходит. С ее помощью нельзя открывать документы большого размера, и она не поддерживает многие кодировки. Например, с помощью Блокнота нельзя открыть текстовые файлы в DOS 866.

Notepad++

Notepad++ (скачать) является одним из наиболее продвинутых текстовых редакторов. Он обладает подсветкой синтаксиса языков программирования, позволяет выполнять поиск и замену по регулярным выражениям, отслеживать изменения в файлах, записывать и воспроизводить макросы, считать хеш-сумы и многое другое. Одной из основных функций Notepad++ является поддержка большого количества кодировок текста и возможность изменения кодировки текстового файла в UTF-8 или Windows 1251.

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

082621 0816 3

После открытия текста можно изменить его кодировку. Для этого нужно открыть меню « Кодировки » и выбрать один из вариантов преобразования. Notepad++ позволяет изменить текущую кодировку текста на ANSI (Windows-1251), UTF-8, UTF-8 BOM, UTF-8 BE BOM, UTF-8 LE BOM.

082621 0816 4

После преобразования файл нужно сохранить с помощью меню « Файл – Сохранить » или комбинации клавиш Ctrl-S.

Akelpad

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

Для того чтобы изменить кодировку текста с помощью Akelpad файл нужно открыть в данной программе. Если после открытия файла текст не читается, то нужно воспользоваться меню « Файл – Открыть ».

082621 0816 5

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

082621 0816 6

Для того чтобы изменить текущую кодировку текста нужно воспользоваться меню « Файл – Сохранить как » и сохранить документ с указанием новой схемы кодирования.

082621 0816 7

В отличие от Notepad++, текстовый редактор Akelpad позволяет сохранить файл в практически любой кодировке. В частности, доступны Windows 1251, DOS 886, UTF-8 и многие другие.

Источник

Как преобразовать utf 8 в windows 1251

n 181 s

Интересные решения Perl. Вопросы и ответы

Как конвертировать строку из UTF-8 в Windows-1251?

Есть как минимум 4 варианта:

1. Написать собственную процедуру перекодировки.
В этом случае придется потратить время на изучение алгоритмов.

2. Можно использовать модуль Convert::Cyrillic, однако он испытывает зависимость от модуля Unicode::Map8, который легко установить под *nix, но с поиском модуля под ActiveState Perl 5.8 могут возникнуть проблемы.

3. Можно использовать модуль Text::Iconv, который доступен как для Perl 5.6, так и для Perl 5.8.

4. Если Вы используете Perl 5.8, то конвертирование можно прозвести с помощью Encode:

Опубликовано: 19 ноября 2005 года.

Комментарии посетителей сайта

Григорий 03.08.2016 17:20

Отлично. Ничего лишнего и всё понятно. Спасибо!

Дмитрий 25.01.2012 15:46

Спасибо, за хороший пример и пояснения!

Андрей 25.05.2011 00:43
Действительно. Четвертый метод сработал. Спасибо.

Есть ли способ для конвертации массива, например,
Encode::from_to(@var_arr, ‘windows-1251’, ‘utf-8’);

Пытался использовать
use open OUT => ‘:utf8’;
use open ‘:utf8’;

но ничего не вышло.

Ответ: 07.09.2006 20:20
Для массива используйте функцию map или же обыкновенный цикл.

Валерий 05.09.2006 04:14
кстати, может есть какой-нибудь вариант вывода perl’ом в браузер текста в UTF-8 без использования модулей Unicode и Text::Iconv. например, с использованием модуля CGI.

и почему не помогает вывод заголовка?
print «Content-type: text/html; charset=utf-8

Источник

Как преобразовать utf 8 в windows 1251

Сообщения: 3665
Благодарности: 1562

» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

contributor

Сообщения: 27459
Благодарности: 8022

Сообщения: 3665
Благодарности: 1562

поясните плз, AFAIK utf16le (=Unicode) Native-кодировка начиная с Win2K

Источник

Заметки Лёвика

web программирование, администрирование и всякая всячина, которая может оказаться полезной

При помощи функции php iconv (строго говоря, это не совсем функция PHP, она использует стороннюю библиотеку (есть iconv.dll и php_iconv.dll или iconv.so), которой может не быть на хостинге) легко преобразовать кодировку (например, из windows-1251 в utf-8 и наоборот:

Если не работает iconv

Т.е. чтобы преобразовать текст из кодировки windows-1251 в UTF-8 следует выполнить:
mb_convert_encoding($s,»UTF-8″,»windows-1251″);

iconv array для массива

Метки: iconv

Опубликовано Пятница, Октябрь 21, 2011 в 15:02 в следующих категориях: Без рубрики. Вы можете подписаться на комментарии к этому сообщению через RSS 2.0. Вы можете оставить комментарий. Пинг отключен.

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

Как быть с запросом select к базе mssql не понимает кирилицу
“select
[Название]
,[номер]
, [Removed]
from imdb.dbo. Оконечное оборудование “;

Следует привести столбцы (или всю базу данных сразу) к соответствующему сравнению (кодировке)
ALTER DATABASE COLLATE Cyrillic_General_CI_AS

Или использовать Nvarchar

declare @test TABLE
(
Col1 varchar(40),
Col2 varchar(40),
Col3 nvarchar(40),
Col4 nvarchar(40)
)
INSERT INTO @test VALUES
(‘иытание’,N’иытание’,’иытание’,N’иытание’)
SELECT * FROM @test

Если изменяю версию php 5.6 то не перекодируется. Не подскажете?

Источник

Как сменить кодировку файла? Notepad++ редактор с подсветкой синтаксиса, кодировка Utf-8 без BOM

money birds728

notepad++ download

Notepad++ — отличный текстовый редактор!

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

Чтобы скачать данную программу, заходим на официальный сайт — Notepad-plus-plus.org — далее ищем ссылку «download», кликаем по ней и выбираем «Notepad++ v*** Installer», где вместо звёздочек будет текущая версия редактора. Скачиваем и устанавливаем, никаких сложностей при установке нет.

Чем вообще хорош этот редактор?

notepad++ highlight

Notepad++ понимает php и подсвечивает синтаксис языка. Кликабельно

Последняя особенность очень важна, например, при редактировании шаблонов движка вашего сайта (напр., WordPress). Почему? Потому что все файлы WP по умолчанию имеют кодировку Utf-8. Если менять их стандартным блокнотом Windows, то к кодировке Utf-8 добавляется специальная BOM-последовательность. Необязательно знать, что это такое, но из-за неё некоторые функции движка работать вообще не будут. Поэтому так важно, чтобы все файлы шаблонов WP были сохранены в кодировке Utf-8 без BOM.

notepad++ menu

Преобразование в кодировку Utf-8 без BOM

Теперь, чтобы открыть текстовый файл данным редактором, надо кликнуть по нему правой кнопкой мышки и выбрать соответствующий пункт меню:

Save as notepad++

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

Спасибо! Хорошая статья. Утвердился в том, чтобы преобразовывать всегда на «без BOM», раньше постоянно мучился: «Что же использовать?». Ещё раз, спасибо.

Огромное спасибо.
Со своим сайд баром замучался, еще не финиш, но когда читаешь и видишь … Спасибо.. Звонок другу не понадобился… =)

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

а где скачать нормальный нотепад. чтобы без виросов всяких?

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

Источник

Adblock
detector» width=»100%» style=»BORDER-RIGHT: #719bd9 1px solid; BORDER-LEFT: #719bd9 1px solid; BORDER-BOTTOM: #719bd9 1px solid» cellpadding=»6″ cellspacing=»0″ border=»0″>

Привет, друзья. Я уже 3 года работаю с вебом, но с таким не встречался еще. В чем суть:
Есть у меня кириллический текст с кодировкой UTF-8 и отображается он нормально.
Мне нужно изменить кодировку на windows-1251 так, чтобы кириллический текст так же нормально читабельно отображался. И вот что-то ну вообще не могу взять в толк, как это сделать?


  • Вопрос задан

    более трёх лет назад

  • 22318 просмотров

Пригласить эксперта

для большого количества файлов есть однострочник на powershell:

Get-ChildItem folderwithfiles -File | foreach {Get-Content $_.fullname -Encoding UTF8 | Out-File folderwithconvertedfiles$_ -encoding default}

Одна загвоздка : encoding default — берет кодировку системы.
Проверить что это windows 1251 можно так(powershell) :
[System.Text.Encoding]::Default.Codepage

Вы имеете в виду, самостоятельно, а не в программном коде? Тогда с помощью Вашего текстового редактора, которым Вы пользуетесь. Например, если Вы предпочитаете Sublime Text, то просто воспользуйтесь пунктом меню File->Save with encoding > Cyrillic (Windows 1251)


  • Показать ещё
    Загружается…

06 февр. 2023, в 02:20

4000 руб./за проект

06 февр. 2023, в 02:06

25000 руб./за проект

06 февр. 2023, в 00:29

300 руб./за проект

Минуточку внимания

Опять в php, использование iconv дает сбои.

function cp1251_to_utf8 ($txt)  {
    $in_arr = array (
        chr(208), chr(192), chr(193), chr(194),
        chr(195), chr(196), chr(197), chr(168),
        chr(198), chr(199), chr(200), chr(201),
        chr(202), chr(203), chr(204), chr(205),
        chr(206), chr(207), chr(209), chr(210),
        chr(211), chr(212), chr(213), chr(214),
        chr(215), chr(216), chr(217), chr(218),
        chr(219), chr(220), chr(221), chr(222),
        chr(223), chr(224), chr(225), chr(226),
        chr(227), chr(228), chr(229), chr(184),
        chr(230), chr(231), chr(232), chr(233),
        chr(234), chr(235), chr(236), chr(237),
        chr(238), chr(239), chr(240), chr(241),
        chr(242), chr(243), chr(244), chr(245),
        chr(246), chr(247), chr(248), chr(249),
        chr(250), chr(251), chr(252), chr(253),
        chr(254), chr(255)
    );

    $out_arr = array (
        chr(208).chr(160), chr(208).chr(144), chr(208).chr(145),
        chr(208).chr(146), chr(208).chr(147), chr(208).chr(148),
        chr(208).chr(149), chr(208).chr(129), chr(208).chr(150),
        chr(208).chr(151), chr(208).chr(152), chr(208).chr(153),
        chr(208).chr(154), chr(208).chr(155), chr(208).chr(156),
        chr(208).chr(157), chr(208).chr(158), chr(208).chr(159),
        chr(208).chr(161), chr(208).chr(162), chr(208).chr(163),
        chr(208).chr(164), chr(208).chr(165), chr(208).chr(166),
        chr(208).chr(167), chr(208).chr(168), chr(208).chr(169),
        chr(208).chr(170), chr(208).chr(171), chr(208).chr(172),
        chr(208).chr(173), chr(208).chr(174), chr(208).chr(175),
        chr(208).chr(176), chr(208).chr(177), chr(208).chr(178),
        chr(208).chr(179), chr(208).chr(180), chr(208).chr(181),
        chr(209).chr(145), chr(208).chr(182), chr(208).chr(183),
        chr(208).chr(184), chr(208).chr(185), chr(208).chr(186),
        chr(208).chr(187), chr(208).chr(188), chr(208).chr(189),
        chr(208).chr(190), chr(208).chr(191), chr(209).chr(128),
        chr(209).chr(129), chr(209).chr(130), chr(209).chr(131),
        chr(209).chr(132), chr(209).chr(133), chr(209).chr(134),
        chr(209).chr(135), chr(209).chr(136), chr(209).chr(137),
        chr(209).chr(138), chr(209).chr(139), chr(209).chr(140),
        chr(209).chr(141), chr(209).chr(142), chr(209).chr(143)
    );

    $txt = str_replace($in_arr,$out_arr,$txt);
    return $txt;
}

Источник

Version: 20220421
By the same author: Virtour.fr — visites virtuelles

Универсальный декодер — конвертер кириллицы

Результат

[Результат перекодировки появится здесь…]

Гостевая книга

Поставьте ссылку на наш сайт!

<a href=»https://2cyr.com/decode/»>Универсальный декодер кириллицы</a>

Custom Work
For a small fee I can help you quickly recode/recover large pieces of data — texts, databases, websites… or write custom functions you can use (invoice available).
FAQ and contact information.

О программе

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

Использование

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

Ограничения

  • Если текст состоит из вопросительных знаков («???? ?? ??????»), то проблема скорее всего на стороне отправителя и восстановить текст не получится. Попросите отправителя послать текст заново, желательно в формате простого текстового файла или в документе LibreOffice/OpenOffice/MSOffice.
  • Не любой текст может быть гарантированно декодирован, даже если есть вы уверены на 100%, что он написан в кириллице.
  • Анализируемый и декодированный тексты ограничены размером в 100 Кб.
  • Программа не всегда дает стопроцентную точность: при перекодировке из одной кодовой страницы в другую могут пропасть некоторые символы, такие как болгарские кавычки, реже отдельные буквы и т.п.
  • Программа проверяет максимум 7245 вариантов из двух и трех перекодировок: если имело место многократное перекодирование вроде koi8(utf(cp1251(utf))), оно не будет распознано или проверено. Обычно возможные и отображаемые верные варианты находятся между 32 и 255.
  • Если части текста закодированы в разных кодировках, программа сможет распознать только одну часть за раз.

Условия использования

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

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

Переводчики

Русский (Russian) : chAlx ; Пётр Васильев (http://yonyonson.livejournal.com/)

Страница подготовки переводов на другие языки находится тут.

Что нового

October 2013 : I am trying different optimizations for the system which should make the decoder run faster and handle more text. If you notice any problem, please notify me ASAP.

На английской версии страницы доступен changelog программы.

Вернуться к кириллической виртуальной клавиатуре.

Программа позволяет перекодировать текстовые файлы из кодировки UTF-8 в кодировку Windows-1251, а также добавлять маркер UTF-8, если его нет. Автор статьи: romix | Редакторы:
Последняя редакция №3 от 03.07.07 | История
URL: http://kb.mista.ru/article.php?id=481

Ключевые слова: кодировка, utf-8, windows-1251, windows

http://x-romix.narod.ru/UTF8_1251.rar

(скачивать ЛЕВОЙ кнопкой мыши, 24К)

Пример вызова:

utf8_1251.exe test_utf8.xml test.xml

Программа изменяет объявление кодировки в первой строке XML.

Перекодирование из Windows-1251 в UTF-8

Перекодирует XML-файл из кодировки Windows-1251 в UTF8.

Если файл уже в кодировке UTF8, то он остается как есть.

Если файл не содержит маркера кодировки UTF8, то добавляет его.

Вызов win1251_utf8.exe Файл1.xml Файл2.xml

Добавление маркера в UTF-8

Используйте ту же самую программу win1251_utf8.exe для добавления маркера UTF-8.

Если кодировка уже была UTF-8, и был маркер, то файл не изменится.


smaharbA пишет:

9 — 28.02.07 — 21:52

//*******************************************
 
Процедура Сформировать()
    Стрим = СоздатьОбъект("Adodb.Stream");
    Стрим.Type = 2;
    Стрим.Mode= 3;
    Стрим.charset="utf-16";
    //Стрим.charset="windows-1251";
 
    Стрим.Open();
    Стрим.WriteText("Проверочка");
    Стрим.SaveToFile("c:unicode.txt",2);
    Стрим.Close();
    Стрим.charset="koi8-r";
    Стрим.Open();
    Стрим.WriteText("Проверочка");
    Стрим.Close();
    Стрим.charset="utf-8";
    Стрим.Open();
    Стрим.WriteText("Проверочка");
    Стрим.SaveToFile("c:utf-8.txt",2);
    Стрим.Close();
КонецПроцедуры

51 / 49 / 26

Регистрация: 15.06.2009

Сообщений: 388

1

21.04.2018, 22:14. Показов 8066. Ответов 4


Всем привет! Возникла необходимость проверить, можно ли преобразовать некоторый текст UTF-8 в кодировку Windows-1251 без потерь. То есть, справедливо ли для заданного текста, что все символы текста существуют в таблице символов кодировки назначения и ни один из символов при преобразовании не будет заменён знаком вопроса.

Можно, конечно:

  • преобразовать весь текст в Windows-1251 с помощью Encoding.Convert() и потом сравнить с исходником — но это может оказаться затратным процессом;
  • посимвольно проверить строку на соответствие кодировке назначения до первого «фейла» — слишком низкоуровнево и «велосипедно». И мне не верится, что ничего подобного не идёт «в коробке» при всех гибких возможностях работы с кодировками в .NET.

Вопрос, собственно, — есть ли более простой, корректный, быстрый способ, о котором я не знаю?

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



0



Эксперт .NET

16749 / 12500 / 3286

Регистрация: 17.09.2011

Сообщений: 20,734

23.04.2018, 14:04

2

Цитата
Сообщение от Skorp24
Посмотреть сообщение

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

Нет.

Юникод поддерживает чуть более миллиона кодов, на данный момент используется что-то около сотни тысяч.
Кодировка Windows-1251 — однобитная, поддерживает максимум 256 кодов.
Следовательно, преобразование любого текста из кодировки UTF8 в Windows-1251 без потерь невозможно.
Если текст содержит только те же символы, которые присутствуют и в Windows-1251, то преобразуется без проблем.

Добавлено через 5 минут
Ну как обычно: сначала написал ответ, потом прочитал вопрос…

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



1



OwenGlendower

Администратор

Эксперт .NET

15242 / 12280 / 4904

Регистрация: 17.03.2014

Сообщений: 24,880

Записей в блоге: 1

24.04.2018, 18:23

3

Лучший ответ Сообщение было отмечено Skorp24 как решение

Решение

Skorp24, для небольшого текста можно сделать так:

C#
1
2
3
4
5
6
7
8
9
string s = "abc123абвu01C4";
var win1251 = Encoding.GetEncoding("windows-1251", EncoderFallback.ExceptionFallback, DecoderFallback.ExceptionFallback);
bool canConvert = false;
try
{
    var bytes = win1251.GetBytes(s);
    canConvert = true;
}
catch (EncoderFallbackException) { }



3



51 / 49 / 26

Регистрация: 15.06.2009

Сообщений: 388

25.04.2018, 14:07

 [ТС]

4

Всем спасибо! Пример с отлавливанием исключения оказался быстрее и выполняется примерно за 70 мс для строки в десять миллионов символов со случайными буквами; пример с конвертацией + сравнением — около 250 мс.



0



kolorotur

Эксперт .NET

16749 / 12500 / 3286

Регистрация: 17.09.2011

Сообщений: 20,734

25.04.2018, 16:25

5

Лучший ответ Сообщение было отмечено OwenGlendower как решение

Решение

Цитата
Сообщение от Skorp24
Посмотреть сообщение

выполняется примерно за 70 мс для строки в десять миллионов символов со случайными буквами; пример с конвертацией + сравнением — около 250 мс.

Это было расценено как вызов!!!1

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
static class EncodingExtensions
{
    public static unsafe bool CanConvert(this Encoding encoding, string text)
    {
        var encoder = encoding.GetEncoder();
        encoder.Fallback = EncoderFallback.ExceptionFallback;
 
        int byteLength = 1024;
        int charLength = text.Length;
 
        var buffer = stackalloc byte[byteLength];
        fixed (char* pBase = text)
        {
            bool completed;
            char* ptr = pBase;
            do
            {
                try
                {
                    encoder.Convert(ptr, charLength, buffer, byteLength, false, out int charsUsed, out int bytesUsed, out completed);
                    ptr += charsUsed;
                    charLength -= charsUsed;
                }
                catch (EncoderFallbackException) { return false; }
            } while (!completed);
        }
 
        return true;
    }
}

Использование:

C#
1
2
var encoding = Encoding.GetEncoding(1251);
encoding.CanConvert("Мама мыла раму");

Текст из 10 миллионов случайных символов русского и английского алфавита, а так же цифр, обрабатывает за ~30мс.
Реализация собственного EncoderFallback и EncoderFallbackBuffer, которые не бросают исключение, а просто прерывают цикл, серьезного прироста в производительности не дала.

Реализация, конечно, чистейший суррогат — исключительно попробовать «сделать быстрее».
Если текст надо не только проверить, но и заодно сконвертировать, то предыдущий вариант лучше — в нем можно заодно и вернуть массив сконвертированных байт.
Однако, если надо только проверить, особенно проверять на большом количестве строк с ненулевой вероятностью несовместимых, то имеет смысл протестировать в реальных условиях и этот вариант, т.к. он не создает в куче ни одного объекта (кроме исключения при несовместимости) — меньше нагрузка на память и на сборщика.



3



Проблема кодировок часто возникает при написании парсеров, чтении данных из xml и CSV файлов. Ниже представлены способы эту проблему решить.

1

windows-1251 в UTF-8

$text = iconv('windows-1251//IGNORE', 'UTF-8//IGNORE', $text);
echo $text;

PHP

$text = mb_convert_encoding($text, 'UTF-8', 'windows-1251');
echo $text;

PHP

2

UTF-8 в windows-1251

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text);
echo $text;

PHP

$text = mb_convert_encoding($text, 'windows-1251', 'utf-8');
echo $text;

PHP

3

Когда ни что не помогает

$text = iconv('utf-8//IGNORE', 'cp1252//IGNORE', $text);
$text = iconv('cp1251//IGNORE', 'utf-8//IGNORE', $text);
echo $text;

PHP

Иногда доходит до бреда, но работает:

$text = iconv('utf-8//IGNORE', 'windows-1251//IGNORE', $text);
$text = iconv('windows-1251//IGNORE', 'utf-8//IGNORE', $text);
echo $text;

PHP

4

File_get_contents / CURL

Бывают случаи когда file_get_contents() или CURL возвращают иероглифы (Алмазные борÑ) – причина тут не в кодировке, а в отсутствии BOM-метки.

$text = file_get_contents('https://example.com');
$text = "xEFxBBxBF" .  $text;
echo $text;

PHP

Ещё бывают случаи, когда file_get_contents() возвращает текст в виде:

�mw�Ƒ0�����&IkAI��f��j4/{�</�&�h�� ��({�񌝷o�����:/��<g���g��(�=�9�Paɭ

Это сжатый текст в GZIP, т.к. функция не отправляет правильные заголовки. Решение проблемы через CURL:

function getcontents($url){
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, $url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
	curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
	curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
	$output = curl_exec($ch);
	curl_close($ch);
	return $output;
}

echo getcontents('https://example.com');

PHP

12.01.2017, обновлено 02.11.2021

Другие публикации

Отправка письма с вложением

Отправка e-mail в кодировке UTF-8 с вложенными файлами и возможные проблемы.

Работа с JSON в PHP

JSON (JavaScript Object Notation) – текстовый формат обмена данными, основанный на JavaScript, который представляет собой набор пар {ключ: значение}. Значение может быть массивом, числом, строкой и…

Массив $_SERVER

Описание значений глобального массива $_SERVER с примерами.

Получить фото из Instagram без API

Так как Instagram и Fasebook ограничили доступ к API, а фото с открытого аккаунта всё же нужно периодически получать и…

Обзор PHP расширений для чтения файлов Excel

В статье представлены различные PHP-расширения для чтения файлов XLS, XLSX, описаны их плюсы и минусы, а также примеры…

Бот Телеграм на PHP

Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.

Декодер онлайн (decoder online)

Текст успешно скопирован!

Определить исходную кодировку

При онлайн передаче электронных документов (почтовая рассылка, скачивание с сайта и т.д.) в файле может сбиться кодировка. В результате вместо привычных слов, предложений и абзацев вы получаете последовательность непонятных символов. Так случается из-за того, что кодирование и декодирование информации происходит некорректно, и устройства отправителя и получателя просто не понимают друг друга. Чтобы расшифровать зашифрованный текст, обратитесь к нашему онлайн декодеру. Decoder (дешифратор или декодер онлайн) от компании Involta способен подобрать нужную кодировку и изменить текст так, чтобы Вы смогли быстро прочитать непонятные «иероглифы». Наш инструмент имеет множество возможностей для декодирования. Он позволяет расшифровать base64 и определить исходные данные, а также перевести информацию в любую другую кодировку онлайн, например, UTF-8, CP-1251, ASCII. Decoder может функционировать как шифратор и дешифратор, то есть вы можете закодировать текст и защитить его содержимое от посторонних глаз. Если вам прислали ссылку с непонятным адресом, то URL-decoder online покажет, на какой сайт она ведет. Еще одна полезная функция сервиса – создать или раскодировать транслит, если нужно сделать перевод с кириллицы на латиницу и наоборот. Декодер работает в режиме онлайн и доступен на любом устройстве с доступом в интернет.

Recoder v3.1.0 (BOM-remover)

github

Небольшая программа для массового (пакетного) перекодирования файлов из одной кодировки в другую. Доступные кодировки windows-1251, koi8-r, cp866, ISO 8859-5, utf-8, utf-8 с BOM-заголовком. Также умеет искать и удалять BOM-заголовок в файлах и каталогах.

Текущая версия: ¶

  • Скачать recoder v3.1.0 для Windows 7+ 64-бит (9.7 MB)

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

  • Скачать recoder v3.1.0 для Ubuntu 20.04+ 64-бит (10.8 MB)

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

Некоторые антивирусы (например, VirusTotal) могут показывать наличие вирусов в исполняемом файле. Это связано с использованием PyInstaller и его модулей.
Если это является проблемой, то проект можно запускать из исходного кода или использовать версию v2.

Последнее изменение: ¶

  • 3 декабря 2022 г. — добавлена галочка «Искать в подкаталогах».
  • 5 марта 2022 г. — приложение переписано на Python (tkinter) с публикацией исходного кода.

Предыдущие версии: ¶

  • v3.0.0: Windows (9.7 MB), Linux (11 MB)
  • v2.3.0: Windows (7.9 MB), Linux (74 kB)
  • v2.2.2: Windows (7.9 MB), Linux (67.7 kB)
  • v2.2.1: Windows (7.9 MB), Linux (66.5 kB)
  • v2.1.1: Windows (7.2 MB), Linux (48.8 kB)
  • v2.1: Windows (8.2 MB), Linux (48.5 kB)
  • v2.0: Windows (7.9 MB)

Скриншоты ¶

Recoder 3.0.0

Recoder 3.0.0


Понравилась статья? Поделить с друзьями:
  • Как windows 10 проверяет доступность интернета
  • Как windows 10 подключить к домашней группе win 7
  • Как windows 10 отключить слежку в windows 10 навсегда
  • Как windows 10 найти параметры папок в windows
  • Как windows 10 домашняя присоединить к домену