С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 6
1

Проблема с кодировками при использовании Thunderbird 45.4.0

17.11.2016, 14:57. Показов 5094. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую.
У меня следующая проблемка с кодировками. Самая живая на мой взгляд тема и ближе всего к cmd + javascript. Сразу говорю ... писать на форум мозилы смысла не вижу ... т. к. в прошлый раз мне с этой темой никто не помог и в этот раз думаю тоже ... но тема таже самая (там все кратенько, загляните чисто для подробностей) https://forum.mozilla-russia.o... 57#p706457

После обновления с версии Thunderbird 38.5.1 на 45.4.0 перестала отрабатывать функция конвертации переменной определенной в windows в переменную javascript опеределенную в автоконфиге thunderbird.cfg.

Если кратко, я получаю ФИО пользователя из AD и запихиваю его в переменную %FULLNAME% в Windows:
Windows Batch file
1
for /f "Tokens=2*" %%m in ('net user %USERNAME% /domain ^| find "Полное имя"' ) do setx FULLNAME "%%n"
Потом с помощью функции в самом thunderbird.cfg на лету конвертирую в UTF-8 (без BOM) и поставляю в поле пользователя по умолчанию:

Javascript
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
try {
 
        function utf8 (text) {
 
        var decoded_text;
        var first_byte,second_byte, first_byte_decoded, second_byte_decoded;
 
        decoded_text = "";
        for(var pos = 0; pos < text.length; pos++) {
            var c = text.charCodeAt(pos);
            if (c > 128) {
                first_byte = parseInt(c/256);
                second_byte = c % 256;
                first_byte_decoded = 192 + first_byte * 4 +
                    parseInt(second_byte/64);
                second_byte_decoded = 128 + second_byte % 64;
                decoded_text =decoded_text +
                    String.fromCharCode(first_byte_decoded) +
                    String.fromCharCode(second_byte_decoded);
            } else {
                decoded_text = decoded_text + String.fromCharCode(c);
            }
        }
        return decoded_text;
        }
 
var fullname = getenv("FULLNAME");
 
defaultPref("mail.identity.id1.fullName", utf8(fullname));
Имя подставляется и переменная существует, но вставляются кракозябры. Т. е. получается почему-то не отрабатывает функция перекодировки в UTF-8 (без BOM).

Перечитал кучу тем ... через BAT, я так понимаю, можно только создать файлик в кодировке UTF-8 (без BOM), но я не могу создать переменную в кодировке UTF-8 (без BOM), например, %FULLNAME_UTF8%. Единственный вариант, который, я думаю, можно реализовать с моими способностями, это создать файлик с правильной кодировкой и положить его куда-нибудь рядом с профилем пользователя и его уже указать в качестве переменно javascript, но не хотелосьбы лишних костылей.

Может кто что подскажет?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.11.2016, 14:57
Ответы с готовыми решениями:

проблема с кодировками при выводе из БД
подскажите ПЛЗ, что делать. вывожу русскоязычные данные из Access базы и они сыпятся знаками...

проблема с кодировками при вставке содержимого файла
Прошу не пинать ногами, если такой вопрос был, я не нашел. Есть Asp-скрипт. В нем есть такая...

Проблема с кодировками
Установил Nuked Klan на сервер, и взялся его переводить (движок французский). Большинство модулей...

Проблема с кодировками в Ajax
вообщем есть такой урезанный код: &lt;DIV id='div'&gt;&lt;/DIV&gt; &lt;SCRIPT language=&quot;JavaScript&quot;&gt; ...

10
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
17.11.2016, 17:01 2
fullname - в какой кодировке? Распечатывать пробовали? что там видно? Может, она уже исходно в UTF-8?

Цитата Сообщение от AlektroNik Посмотреть сообщение
Имя подставляется и переменная существует, но вставляются кракозябры.
Крякозяблики покажите?

Вам только javascript код походит или jscript тоже? (намекаю на использование объектов ActiveXObject, как в первом посте темы "Перекодировка текста (сборник кодов для различных кодовых страниц)", спойлер "Любая кодировка в любую")

Добавлено через 1 минуту
Цитата Сообщение от AlektroNik Посмотреть сообщение
через BAT, я так понимаю, можно только создать файлик в кодировке UTF-8 (без BOM)
ну можно и так. Создать, потом прочитать его. Но лучше так не делать, сразу через jscript.
0
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 6
17.11.2016, 17:21  [ТС] 3
Цитата Сообщение от Dragokas Посмотреть сообщение
Вам только javascript код походит или jscript тоже?
По-моему только javascript.

Цитата Сообщение от Dragokas Посмотреть сообщение
Крякозяблики покажите?
Проблема с кодировками при использовании Thunderbird 45.4.0
0
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 6
17.11.2016, 17:45  [ТС] 4
Добавлено через 10 минут
Цитата Сообщение от Dragokas Посмотреть сообщение
Любая кодировка в любую
А разве там не нужен именно файл на входе и на выходе?
Или вы предлагаете взять thunderbird.cfg перекодировать его в 866 потом записать в него параметр (опять же парсить, менять), потом конвертнуть его уже в 65001 (UTF-8 (без BOM)). В таком случае проще отдельно файлик с ФИО положить, а то как-то корявенько получается.
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
17.11.2016, 17:53 5
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

В виде текста, а не скриншотом.
Ну да ладно. Вижу, что UTF8 -> Latin.

Так пробовали?
Код
defaultPref("mail.identity.id1.fullName", fullname);
Добавлено через 2 минуты
Цитата Сообщение от AlektroNik Посмотреть сообщение
А разве там не нужен именно файл на входе и на выходе?
в том примере нужен. Но поток можно загрузить и виде массива.
Цитата Сообщение от AlektroNik Посмотреть сообщение
Или вы предлагаете взять thunderbird.cfg перекодировать его в 866 потом записать в него параметр
ничего такого я не предлагал.
1
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 6
17.11.2016, 18:12  [ТС] 6
Цитата Сообщение от Dragokas Посмотреть сообщение
defaultPref("mail.identity.id1.fullName", fullname);
Обалдеть, прокатило. Удалил целиком функцию function utf8 (text) для чистоты эксперемента и отредактировал как Вы сказали. Похоже Thunderbird что-то у себя подкрутил и теперь костыль в виде функции не требуется Целый день убил сегодня на это.
Спасибо, что уделили время. Знал, что на Вас можно положиться

А может на последок подскажите, как узнать в какой кодировке у меня хранится переменная в Windows? Или как так получилось? Может это и не Thunderbird поправил, а просто у меня переменные одинаково называются FULLNAME и fullname, и javascript каким-то образом переписал значение в Windows. Т. е. как Вы пришли к такому выводу?
echo %FULLNAME%
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
17.11.2016, 18:31 7
Цитата Сообщение от AlektroNik Посмотреть сообщение
Т. е. как Вы пришли к такому выводу?
Вот так:
Проблема с кодировками при использовании Thunderbird 45.4.0


Цитата Сообщение от AlektroNik Посмотреть сообщение
в какой кодировке у меня хранится переменная в Windows?
Начать с процедуры её генерации, переписав так:
Windows Batch file
1
for /f "Tokens=2*" %%m in ('net user %USERNAME% /domain ^| find "Полное имя"' ) do echo %%n>name.txt
Выполнить. Потом открыть файл name.txt блокнотом Windows, если иероглифов нет, нажать Файл -> Сохранить как... и внизу посмотреть какая кодировка.
Это поможет, если в тексте будет хоть один знак кириллицы.
Вообще, в ANSI (cp-1251), но хз, у Windows 8/10 часть CMD команд выдают юникод, так что по-разному может быть в разных версиях ОС.
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
17.11.2016, 19:18 8
Цитата Сообщение от AlektroNik Посмотреть сообщение
Может это и не Thunderbird поправил
Думаю, что это из-за того что после обновления слетели некоторые настройки, в частности стандартная кодировка при составлении письма:

Javascript
1
user_pref("prefs.converted-to-utf8", true);
Проверьте, есть ли такая строка в файле настроек. Если нет, добавить.
0
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 6
17.11.2016, 20:32  [ТС] 9
Цитата Сообщение от Dragokas Посмотреть сообщение
user_pref("prefs.converted-to-utf8", true);
Такой настройки у меня нет ни в файлике автоконфигурации thunderbird.cfg, который лежит рядом с thunderbird.EXE ни в папке профиля пользователя C:\Users\user\AppData\Roaming\Thunderbird\Profiles\g6e7ec0b.default\prefs.js, который переопределяет параметры автоконфига thunderbird.cfg. Его добавление ничего не меняет ни в true ни в false. Пробовал конвертировать файл prefs.js через Notepad++ в ANSI думал может автоматом переконвертирует весь файл - нет, вбивал в кодировке ANSI ФИО ("Имя отправителя") , думал будет конвертировать автоматом ФИО ("Имя отправителя") в UTF8 - нет, просто пустое поле показвал. Проверял формат создаваемых новых сообщений кодировку, всегда "Юникод" стоит. И кучу других тестов, но нигде не нашел как же этот параметр работает и за что конкретно отвечает.
Если Вас не затруднит, ткныте носом в пример, что же должно менятся когда этот параметр включен или выключен?

Теперь по поводу ФИО ("Имя отправителя") и моих экспериментов. Я поторопился радоваться, но направления было верным.
Опишу подробно мои тесты. Сразу хочу обратить внимание нужна обязательная перезагрузка машинки, т. к. именно после перезагрузки все и слетало на нет. Вобщем для чистоты эксперемента ребут обязателен в моем случае.

Исходный конфиг:

Кликните здесь для просмотра всего текста
Javascript
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
function utf8 (text) {
 
        var decoded_text;
        var first_byte,second_byte, first_byte_decoded, second_byte_decoded;
 
        decoded_text = "";
        for(var pos = 0; pos < text.length; pos++) {
            var c = text.charCodeAt(pos);
            if (c > 128) {
                first_byte = parseInt(c/256);
                second_byte = c % 256;
                first_byte_decoded = 192 + first_byte * 4 +
                    parseInt(second_byte/64);
                second_byte_decoded = 128 + second_byte % 64;
                decoded_text =decoded_text +
                    String.fromCharCode(first_byte_decoded) +
                    String.fromCharCode(second_byte_decoded);
            } else {
                decoded_text = decoded_text + String.fromCharCode(c);
            }
        }
        return decoded_text;
        }
 
var fullname = getenv("FULLNAME");
 
defaultPref("mail.identity.id1.fullName", utf8(fullname));


Тест 1
Редактирую строчку, убираю ТОЛЬКО вызов функции utf8. Перезагружась.
Кликните здесь для просмотра всего текста
было
Javascript
1
defaultPref("mail.identity.id1.fullName", utf8(fullname));
стало
Javascript
1
defaultPref("mail.identity.id1.fullName", fullname);

Получаю корректное отображение ФИО ("Имя отправителя") в Thunderbird.


Тест 2
Решаю убрать и саму функцию utf8. По логике, если я ее не использую, зачем она мне в конфиге. Перезагружаюсь.
Кликните здесь для просмотра всего текста
было
Javascript
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
function utf8 (text) {
 
        var decoded_text;
        var first_byte,second_byte, first_byte_decoded, second_byte_decoded;
 
        decoded_text = "";
        for(var pos = 0; pos < text.length; pos++) {
            var c = text.charCodeAt(pos);
            if (c > 128) {
                first_byte = parseInt(c/256);
                second_byte = c % 256;
                first_byte_decoded = 192 + first_byte * 4 +
                    parseInt(second_byte/64);
                second_byte_decoded = 128 + second_byte % 64;
                decoded_text =decoded_text +
                    String.fromCharCode(first_byte_decoded) +
                    String.fromCharCode(second_byte_decoded);
            } else {
                decoded_text = decoded_text + String.fromCharCode(c);
            }
        }
        return decoded_text;
        }
 
var fullname = getenv("FULLNAME");
 
defaultPref("mail.identity.id1.fullName", fullname);
стало
Javascript
1
2
3
var fullname = getenv("FULLNAME");
 
defaultPref("mail.identity.id1.fullName", fullname);


Получаю тоже самое, что и при экспериментах с кодировкой и параметром user_pref("prefs.converted-to-utf8", true);, а именно пустоту в строке ФИО ("Имя отправителя") в Thunderbird.


ТЕСТ 3
Меняю переменную fullname на fullname_thunderbird, чтобы избежать некорректной обработки с переменной FULLNAME в Windows.
Кликните здесь для просмотра всего текста
было
Javascript
1
2
3
var fullname = getenv("FULLNAME");
 
defaultPref("mail.identity.id1.fullName", fullname);


Кликните здесь для просмотра всего текста
стало
Javascript
1
2
3
var fullname_thunderbird = getenv("FULLNAME");
 
defaultPref("mail.identity.id1.fullName", fullname_thunderbird);

Получаю корректное отображение ФИО ("Имя отправителя") в Thunderbird.


ИТОГ
1. Thunderbird как-то все-таки обрабатывает автоматом переменную в Windows и записывает к себе уже в формате utf-8, скорей всего в каком формате находится сам файл thunderbird.cfg, в током и происходит запись, не проверял. Кодировка по умолчанию в Windows 7 OEM 866, это неоднократно проверялось в скриптах.
2. Переменные всеже пересикались, странно что, долгое время все работало и почему-то с самого начала не сделал разные переменные.
3. Ну и итоговый конфиг ... для закрепления без всякий дополнительных функций вообще:
Javascript
1
2
3
var fullname_thunderbird = getenv("FULLNAME");
 
defaultPref("mail.identity.id1.fullName", fullname_thunderbird);
0
Эксперт WindowsАвтор FAQ
18017 / 7718 / 892
Регистрация: 25.12.2011
Сообщений: 11,496
Записей в блоге: 16
17.11.2016, 21:18 10
Цитата Сообщение от AlektroNik Посмотреть сообщение
Если Вас не затруднит, ткныте носом в пример, что же должно менятся когда этот параметр включен или выключен?
Я считаю, что при установке свойства converted-to-utf8 в true огненный лис должен был начать воспринимать свойства, влияющие на формирование письма, в формате utf-8, то есть должен был корректно обработать строку:
Javascript
1
defaultPref("mail.identity.id1.fullName", utf8(fullname));
Если это не так, значит есть ещё какая-то настройка кодировки. Я вот такую ещё встречал:
Код
user_pref("intl.charsetmenu.mailview.cache", "ISO-8859-1, UTF-8");
Попробуйте ещё перепроверить:
Tools → Options → Display → Formatting → Fonts → Advanced... → Character Encodings → Outgoing Mail:
Проблема с кодировками при использовании Thunderbird 45.4.0


Кстати, попробуйте заблокировать настройку такой командой:
Код
lockPref("prefs.converted-to-utf8", true);
Я ещё подумал, может быть происходит двойное кодирование в utf8? Проверьте, в какой кодировке у Вас сохранён файл скрипта? Если в UTF-8, попробуйте временно пересохранить в ANSI, а функцию utf8() не удаляйте из скрипта. Оставьте всё как было раньше.

На счёт потери настроек после перезагрузки, вот тут человек пишет что можно создать файл user.js, который будет иметь более высокий приоритет над prefs.js
0
0 / 0 / 0
Регистрация: 17.11.2016
Сообщений: 6
18.11.2016, 16:26  [ТС] 11
Цитата Сообщение от Dragokas Посмотреть сообщение
огненный лис должен
Огненный может и должен, а моя громовая птица не особо Специально проверил. Да и нет нужды теперь в той функции utf8, пашет без нее, так это замечательно, нет лишнего костыля.

Цитата Сообщение от Dragokas Посмотреть сообщение
Tools → Options → Display → Formatting → Fonts → Advanced... → Character Encodings → Outgoing Mail:
Исходящие UTF-8, Входящие Win-1251

Цитата Сообщение от Dragokas Посмотреть сообщение
lockPref("prefs.converted-to-utf8", true);
Нет смысла блокировать, я ее и так непосредственно под пользователем делаю.

Цитата Сообщение от Dragokas Посмотреть сообщение
может быть происходит двойное кодирование в utf8?
Может быть ...

Цитата Сообщение от Dragokas Посмотреть сообщение
в какой кодировке у Вас сохранён файл скрипта?
Файл скрипта, который ФИО получает в OEM 866, конфиги thunderbird в UTF-8 (без BOM).

Цитата Сообщение от Dragokas Посмотреть сообщение
На счёт потери настроек после перезагрузки
Ну у меня настройки не теряет ... я вроде такого не писал, а перезагрузка нужна для чистоты эксперемента, потомучто ФИО Выдергивается при входе ну и скинуть все возможные эксперементы.

Мы сейчас пытаемся заставить работать то, без чего и так все замечательно работает ... Про параметр prefs.converted-to-utf8 безусловно ценное замечание, но гадать на кофейной гуще и тратить время не ненужный эксперемент думаю не стоит. Видимо в почтовик встроили функцию конвертации UTF-8 просто из-за этого и происходил этот глюк у меня.

Не вижу смысла продолжать тесты, ОГРОМНОЕ спасибо за помощь.
0
18.11.2016, 16:26
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2016, 16:26
Помогаю со студенческими работами здесь

dbf - проблема с кодировками !!!
Есть 'база данных' - обычный файл dbf. Самое интересное, что я не знаю как он был создан(что за...

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

Проблема с кодировкой при использовании процедур
Здравствуйте. Возникла проблема с кодировкой при использовании процедур. Сама база в utf8 и там уже...

Проблема с кодировками вставляемых файлов
Вставляю в Word текстовые файлы в DOS кодировке с помощью Selection.InsertFile ... Как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru