Перекодировка из UTF8 в 1251

Автор Злоп, 19 февраля 2024, 01:11

« назад - далее »

Злоп

Перекодировать в UTF - есть, а перекодировать ИЗ - нет...
Предлагаю рассмотреть вопрос перекодировки ИЗ UTF8 в 1251.
Пару раз уже попадались клиенты, к которым из внешних источников приходит в UTF8, хотя подмножество символов там укладывается в 1251 (вот сижу как раз с таким файликом).
Понятно что при перекодировке ИЗ могут получиться "нечитаемые/невидимые символы" по таблице 1251 - тггад их заменять на знак вопроса "?" в колировке 1251.
.
примерно так как-то

АЛьФ

Запросы такие уже поступали и даже есть метод EncodeFromUTF8. Только не помню насколько он работоспособен.

АЛьФ

И кто-то (не будем показывать пальцем) даже обещался потестить...
https://mista.ru/topic/861846#815

АЛьФ

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

Злоп

Цитата: АЛьФ от 19 февраля 2024, 09:10И кто-то (не будем показывать пальцем) даже обещался потестить...
https://mista.ru/topic/861846#815
Это был слонёнок... ?

АЛьФ

Кстати, EncodeFromUTF8 доделал и добавил в документацию. Сейчас готовлю тестовую сборку для выкладывания.

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

MWW_Ruza

Конечно, если кроме Формекса ничего не используешь, то надо... А если все равно работаешь с интернетом и т.п. то есть ВК от Djelf, curl1c(карлик в простонародье :) ), там есть методы конвертации и туда и обратно, в разные форматы, очень неплохо работает. Особо нет смысла Алексея этим грузить...

АЛьФ

Цитата: MWW_Ruza от 19 февраля 2024, 22:18Особо нет смысла Алексея этим грузить...

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

Злоп

#8
Цитата: MWW_Ruza от 19 февраля 2024, 22:18Конечно, если кроме Формекса ничего не используешь, то надо... А если все равно работаешь с интернетом и т.п. то есть ВК от Djelf, ...
Если есть возможность обойтись одной вк - то лучше так, тем более что один метод Уде был, а
.. если есть гриб груздь, то должен быть и гриб радоздь...

Злоп

Цитата: АЛьФ от 19 февраля 2024, 21:59Что-то по тестовой замечаний давно не возникало... Надо уже, наверное, ее выкладывать, как рабочую и двигать дальше.
Не у всех вот прямо состояние "поперло!", у кого-то состояние "тупняк..."

Злоп

Типа тестирую перекодировку.
Просится что-то типа
Сервис.ОпределитьКодировку(<Строка>,<КодировкаСтрокой>);
Возвращает числовое значение кодировки, типа 1 - DOS, 2 - 1251, 3 - UTF8, 0 - не удалось определить кодировку/другая кодировка какаято
<Строка> - строка для определения кодировки
<КодировкаСтрокой> - строковое обозначение кодировки (в общепринятой нотации), соответствующее возвращаемому числовому значению (для 0 - соответствует "?" или "неизвестная кодировка" или пустая строка или...)
.

АЛьФ

Цитата: Злоп от 21 февраля 2024, 23:05Типа тестирую перекодировку.
Просится что-то типа
Сервис.ОпределитьКодировку(<Строка>,<КодировкаСтрокой>);
Возвращает числовое значение кодировки, типа 1 - DOS, 2 - 1251, 3 - UTF8, 0 - не удалось определить кодировку/другая кодировка какаято
<Строка> - строка для определения кодировки
<КодировкаСтрокой> - строковое обозначение кодировки (в общепринятой нотации), соответствующее возвращаемому числовому значению (для 0 - соответствует "?" или "неизвестная кодировка" или пустая строка или...)
.


Я не знаю метода определения кодировки.

Злоп

Цитата: АЛьФ от 21 февраля 2024, 23:13Я не знаю метода определения кодировки.
"А, блин!!!" сказали рабочие!

Злоп

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

Что важно: если строку, получившуюся в результате Decode или Encode надо записать в файл- то пишем в файлик с кодовой страницей 1251...

Злоп

Цитата: Злоп от 22 февраля 2024, 01:22то важно: если строку, получившуюся в результате Decode или Encode надо записать в файл - то пишем в файлик с кодовой страницей 1251...
.
Думаю, надо включить в ALS типа описание дополнить:

Т = СоздатьОбъект("Текст");
Т.КодоваяСтраница(0); // 0 - windows-кодировка
СтрокаВкодировкеUTF8 = Сервис.DecodeToUTF8("строка для перкодировки");
Т.ДобавитьСтроку(СтрокаВкодировкеUTF8);
Т.Записать(ИмяФайла); // файл будет в кодировке UTF8!